首页 > 解决方案 > 在 while 循环中使用 eof() 时出现问题 [C++]

问题描述

我对以下代码有疑问。

#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++ioslinuxeof

解决方案


推荐阅读