Quantcast
Channel: Форум программистов и сисадминов Киберфорум
Viewing all articles
Browse latest Browse all 517399

Различия ifstream::get() и ifstream::get(ch) - С++ для начинающих

$
0
0
Доброго времени суток. Была тут тема, в которой я не разобрался до конца. Код ниже проверяет баланс скобок в текстовом файле
Код:

#include "StdAfx.h"
 
using namespace std;
 
int main(void)
{
    setlocale(LC_ALL, "Russian");
 
    ifstream in("cppcode.txt");
    ofstream out("scanresult.txt");
 
    if (in.is_open() && out.is_open())
    {
        int symbols[] = { 0, 0, 0, 0 }; // '(', ')', '{', '}'
 
        while (!in.eof())
        {
            char symbol = static_cast<char>(in.get());
 
            switch (symbol)
            {
                case '(':
                {
                    symbols[0]++;
                    break;
                }
 
                case ')':
                {
                    symbols[1]++;
                    break;
                }
 
                case '{':
                {
                    symbols[2]++;
                    break;
                }
 
                case '}':
                {
                    symbols[3]++;
                    break;
                }
            }
        }
 
        out << "( = " << symbols[0] << endl
            << ") = " << symbols[1] << endl
            << "{ = " << symbols[2] << endl
            << "} = " << symbols[3] << endl;
 
        in.close();
        out.close();
 
        if (symbols[0] == symbols[1])
            cout << "OK1" << endl;
        else cout << "ERROR1" << endl;
 
        if (symbols[2] == symbols[3])
            cout << "OK2" << endl;
        else cout << "ERROR2" << endl;
    }
    else cout << "Error opening files." << endl;
 
    cin.get();
 
    return 0;
}

В таком виде все работает нормально, при входном файле
{{}}
()
выдаст
( :1
) :1
{ :2
} :2

Но если заменить строку 18 на
Код:

char symbol;
in.get(symbol);

то в выводе будет добавлен один лишний символ, который последний в файле, в данном случае
( :1
) :2
{ :2
} :2

При этом, если в конец файла добавить пустую строку, второй вариант тоже нормально отработает. Объясните в чем разница... Заранее благодарю.

Viewing all articles
Browse latest Browse all 517399

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>