c++ - 从 fstream 对象读取括号。 C++

标签 c++ ifstream

我打开了一个 .txt 文件,其中包含一个名为 input 的 ifstream 对象。如果一个新行以“(”开头,那么它不会按照我想要的方式读取它。预期的输出不会被打印出来,然后它退出循环。我希望它只跳出 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

最佳答案

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

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

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

关于c++ - 从 fstream 对象读取括号。 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14793383/

相关文章:

c++ - 正则表达式无法从字符串中提取双参数子字符串

c++ - 使用 boost iostreams 读取和写入数组到压缩文件

c++ - 从输入文件中读取多行

c++ - std::vector<unsigned char> 在使用 std::ifstream 读取二进制文件后保持为空

c++ - 编译 C++ 代码时出错(无效转换)

c++ - 在 API 和应用程序线程之间共享数据

C++构造函数

c++ - 即使 CreateWindowEx 看似成功,WinAPI ShowWindow 也会失败

c++ - 如何正确使用 ifstream 从输入文件中读取数据?

c++ - ifstream read 和 fread 不返回相同的数据,C++