3

我打开了一个带有名为 .txt 的 ifstream 对象的 .txt 文件input。如果新行以“(”开头,那么它不会按照我想要的方式读取它。预期的输出不会被打印,然后它会退出循环。我希望它仅在以下情况下跳出 while 循环它到达文件的末尾。我在做什么错?我的 do 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
4

1 回答 1

3

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

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

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

于 2013-02-10T00:51:26.793 回答