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

时间:2015-02-02 15:54:24

标签: c++ gcc codeblocks

考虑以下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)个输入上输出。看这个图片: enter image description here

3 个答案:

答案 0 :(得分:2)

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

然后,由于否定if

,它不会进入!语句

它不显示您的第二个输入,因为您在第二个a之后没有打印cin

答案 1 :(得分:1)

您每次迭代都会捕获两次输入:一次在while条件下,另一次在if条件下。因此,只有两个输入中的一个被打印。这是因为即使if条件失败,它已经读完了。

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

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

答案 2 :(得分:0)

如果你想检查非整数输入,这样做。

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

cout << "Exiting"
     <<endl;

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