C++:为什么它在替代基础上输出?

C++: Why Does It Output On Alternative Basis?

考虑以下 C++ 代码:(codeblocks = IDE)

#include <iostream>
#include <stdio.h>

using namespace std;

int main() {
    int a;
    while(cin>>a) {
        cout<<"You sir, Just Entered: "<<a<<endl;
        if(!(cin>>a)) {
        cout<<"Exiting"<<endl;
        break;
        }
    }
}

如果我删除 if(!(cin>>a)) { 条件并只写 cout<<"You sir, Just Entered: "<<a<<endl;,它会输出。否则,目前,它不会在第 (n+1) 个输入上输出。看这张图片:

if(!(cin>>a)) { 正在捕获您的下一个输入(例如 2、4、6、8)。

然后,由于否定 !

,它不会进入 if 语句

它不显示你的第二个输入,因为你在第二个 cin

之后没有打印 a

您每次迭代捕获输入两次:一次在 while 的条件下,第二次在 if 的条件下。因此,只有二分之一的输入被打印出来。那是因为即使 if 的条件失败了,到那时它已经读取了。

您的 while 循环已经进行了检查:如果用户输入非数字,它不会重复。您的固定代码很简单:

int main() {
    int a;
    while(cin>>a) {
        cout<<"You sir, Just Entered: "<<a<<endl;
    }
    cout<<"Exiting"<<endl;
}

如果你想检查非整数输入,这就可以了。

int a;
while(cin >> a)
{
    cout << "Sir you entered: " << a <<endl;
}

cout << "Exiting"
     <<endl;

检查是在 while loop 中自动完成的,因为输入会产生 true 如果它有效(在您的情况下为整数),这允许进一步输入。如果输入无效,程序将退出循环并显示 exiting 消息。