Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;Cin忽略非整数? 我有一个关于C++的问题。我一直在寻找答案,但没有找到任何可以修复我的代码的方法。所以我决定问问自己。我的问题是,我制作了一个小程序,它将输出一周中的某一天,因此如果用户输入1,它将输出一周中的第一天(周日或周一,取决于您居住的地方),依此类推。但是,如果用户输入例如8,则程序将输出“请选择一个介于1和7之间的数字!” 然而,我的问题是,当用户输入一个字符或随机单词时,它将永远循环“请选择一个介于1和7之间的数字!” #包括 #包括 #包括 使用名称空间std; int main(){ int输入; 做{ cin>>输入; 开关(输入){ 案例1: cout_C++_While Loop_Cin - Fatal编程技术网

C++;Cin忽略非整数? 我有一个关于C++的问题。我一直在寻找答案,但没有找到任何可以修复我的代码的方法。所以我决定问问自己。我的问题是,我制作了一个小程序,它将输出一周中的某一天,因此如果用户输入1,它将输出一周中的第一天(周日或周一,取决于您居住的地方),依此类推。但是,如果用户输入例如8,则程序将输出“请选择一个介于1和7之间的数字!” 然而,我的问题是,当用户输入一个字符或随机单词时,它将永远循环“请选择一个介于1和7之间的数字!” #包括 #包括 #包括 使用名称空间std; int main(){ int输入; 做{ cin>>输入; 开关(输入){ 案例1: cout

C++;Cin忽略非整数? 我有一个关于C++的问题。我一直在寻找答案,但没有找到任何可以修复我的代码的方法。所以我决定问问自己。我的问题是,我制作了一个小程序,它将输出一周中的某一天,因此如果用户输入1,它将输出一周中的第一天(周日或周一,取决于您居住的地方),依此类推。但是,如果用户输入例如8,则程序将输出“请选择一个介于1和7之间的数字!” 然而,我的问题是,当用户输入一个字符或随机单词时,它将永远循环“请选择一个介于1和7之间的数字!” #包括 #包括 #包括 使用名称空间std; int main(){ int输入; 做{ cin>>输入; 开关(输入){ 案例1: cout,c++,while-loop,cin,C++,While Loop,Cin,IO操作设置有关流当前状态的标志 这些都是重要的标志,如果读取输入,您应该注意这些标志 badbit-i/o操作上的读/写错误 failbit—i/o操作上的逻辑错误 eofbit-输入操作时达到文件结尾 如果将字符传递到需要int的流(整体传递错误的数据类型,无法转换为cin需要的类型),则设置failbit 这就是插入错误输入后进入无限循环的原因。failbit已设置且未清除cin,因此下一次读取操作也一次又一次失败 要做的事情是取消设置failbit,并使用ignore放弃输入缓冲区中

IO操作设置有关流当前状态的标志

这些都是重要的标志,如果读取输入,您应该注意这些标志

  • badbit-i/o操作上的读/写错误
  • failbit—i/o操作上的逻辑错误
  • eofbit-输入操作时达到文件结尾
如果将字符传递到需要
int
的流(整体传递错误的数据类型,无法转换为
cin
需要的类型),则设置
failbit

这就是插入错误输入后进入无限循环的原因。
failbit
已设置且未清除
cin
,因此下一次读取操作也一次又一次失败

要做的事情是取消设置
failbit
,并使用
ignore
放弃输入缓冲区中的错误输入

std::cin.clear();      // without params clears flags
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // Clear input buffer
并且
std::cin.eof()
将告诉您如果设置了
eofbit
,请达到
eof
(std输入时按CTRL+D/+Z)


语句
cin>>输入可能失败,例如,如果用户输入的内容无法转换为整数值,或者流达到
EOF
(例如,标准输入中的CTRL-D或CTRL-Z)。 如果
cin>>input
失败,则会发生两件事:第一,设置错误状态,指示失败的类型。第二,表达式返回
false
,指示未向
input
写入任何值

因此,在继续之前,您应该始终检查
cin>>…
的结果。如果检测到无效输入,则必须在再次读取之前重置错误标志(使用
cin.clear()
),并且您可能希望跳过无效输入(使用
cin.ignore(…)
),以避免读取相同的输入(无效)反复输入:

int main() {

    int input;
    while (true) {

        while (!(cin >> input)) {

            if (cin.eof()) {
                cout << "user terminated input." << endl;
                return 0;
            }
            cout << "invalid input (not a number); try again." << endl;
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(),'\n');
        }

        // from here on, you may rely that the user has input a number.

        cout << input;

        // ... your code goes here
    }

    return 0 ;
}
intmain(){
int输入;
while(true){
而(!(cin>>输入)){
if(cin.eof()){

这是正常的。你从不检查输入是否正常。
int input;
cin >> input;
while (! cin.fail())
{
   // Process data
   cin >> input;
}
if (cin.eof())
{
    // End of file (input) reached
    // Terminate reading
}
int main() {

    int input;
    while (true) {

        while (!(cin >> input)) {

            if (cin.eof()) {
                cout << "user terminated input." << endl;
                return 0;
            }
            cout << "invalid input (not a number); try again." << endl;
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(),'\n');
        }

        // from here on, you may rely that the user has input a number.

        cout << input;

        // ... your code goes here
    }

    return 0 ;
}