在 while 循环中使用 eof() 时出现问题 [C++]

Problem using eof() in a while loop [C++]

提问人:mcp 提问时间:8/29/2020 更新时间:8/29/2020 访问量:137

问:

我对以下代码有问题。

#include<iostream>
template <class A> void reading(A &a) {
    bool x = true;
    while(x) {
        x = false;
        std::cin >> a;
        while (std::cin.fail()) {
            if (std::cin.eof()) {
                std::cout <<"You pressed CTRL+D\n";
                std::cin.clear();
                std::cin.ignore (1000000000, '\n');
            }
            else {
                std::cout <<"Give me numbers, not letters\n";
                std::cin.clear();
                std::cin.ignore(1000000000,'\n');
            }
            x = true;
        }
    }
}

int main() {

    double o[3];
    for (double &i:o)
        reading (i);
    for (int j = 0; j<3; j++)
        std::cout<<o[j]<<std::endl;   
}

特别是,当我按 ctrl+d 时,程序会无限循环进入。 有人知道问题出在哪里,解决方案是什么吗?

我的目标是制作一个可以读取任何类型的数据并在输入过程中禁用 ctrl+d 的模板函数。

C++ iOS Linux EOF

评论

0赞 Eljay 8/29/2020
操作系统将 Ctrl+D 视为文件末尾。您可以更改为 Windows,在这种情况下,Ctrl+Z 将是文件末尾。
0赞 Andreas Wenzel 8/29/2020
顺便说一句:如果你想忽略 中无限量的输入,那么你应该将第一个参数设置为 。有关详细信息,请参阅有关 std::basic_istream<CharT,Traits>::ignore 的文档。std::cin.ignorestd::numeric_limits<std::streamsize>::max()
0赞 Remy Lebeau 8/29/2020
"当我按 ctrl+d 时,程序会进入一个无限循环“——嗯,是的,因为除了成功读取值之外,你永远不会在任何事情上中断循环。如果无法提取 或遇到 EOF,则清除条件并继续循环。doubleoperator>>double

答: 暂无答案