从fstream对象中读取括号。 C ++

时间:2013-02-10 00:45:20

标签: c++ ifstream

我打开了一个带有名为input的ifstream对象的.txt文件。如果一个新行以“(”开头,那么它不会按照我想要的方式读取它。预期的输出不会被打印出来,然后它会退出循环。我希望它只跳出while循环时它到达文件的末尾。我做错了什么?我的while循环和我的.txt文件在下面。

char c;
int i;
do
{
    if(input.peek( ) == '(' || input.peek( ) == ')')
    {
        input >> c;
        cout << c;
    }else if(input.peek( ) == '+' || input.peek( ) == '-' || input.peek( ) == '*' || input.peek( ) == '/')
    {
        input >> c;
        cout << c;
    }else
    {
        input >> i;
        cout << i;
    }

}while(input && input.peek( ) != EOF);

这是.txt文件,每个文件都在一个单独的行中:

(3)
(3)
4
(5+7)-(5*3)

这是我的输出:

 (3)3

1 个答案:

答案 0 :(得分:3)

所以,我很确定问题是input.peek()在读取')'后返回换行符。然后input >> i;没有读取数字,i仍然是之前的值,因此输出为3。您可以在i = 42;之前添加input >> i;来快速尝试此操作 - 如果输出变为(3)42,那么我是对的。

如果我是对的,你会想要添加一些代码来处理isspace()或类似的东西。

我还建议您在第一个cpeek = input.peek();之前执行if之类的操作,然后使用if (cpeek == '(' || cpeek == ')')...等。