C++ cin的未知行为

C++ cin的未知行为,c++,C++,首先,我想说,我知道使用getline是一个更好的选择,但是,我很好奇为什么这段代码不能像预期的那样工作:我不知道为什么 #include <iostream> #include <string> using namespace std; int main() { while(1) { int input; cout << "---> "; cin >> input;

首先,我想说,我知道使用getline是一个更好的选择,但是,我很好奇为什么这段代码不能像预期的那样工作:我不知道为什么

#include <iostream>
#include <string>
using namespace std;

int main() {

    while(1) {
        int input;
        cout << "---> ";
        cin >> input;
        if(cin.fail()) {
            char rd = cin.get();
            cout << "failure" << rd << "=" << cin.fail() << " " << endl;
        }
    }


    return 0;
}
#包括
#包括
使用名称空间std;
int main(){
而(1){
int输入;
cout>输入;
if(cin.fail()){
char rd=cin.get();

cout获取输入整数后,按enter键时会得到一个换行符作为字符。与字符输入相同

#include <iostream>
#include <string>
using namespace std;

int main() {

    while(1) {
        int input;
        cout << "---> ";
        cin >> input;
        getchar();
        if(cin.fail()) {
            char rd = cin.get();
            getchar();
            cout << "failure" << rd << "=" << cin.fail() << " " << endl;

        }
    }
    return 0;
}
#包括
#包括
使用名称空间std;
int main(){
而(1){
int输入;
cout>输入;
getchar();
if(cin.fail()){
char rd=cin.get();
getchar();

cout获取输入整数后,按enter键时会得到一个换行符作为字符。与字符输入相同

#include <iostream>
#include <string>
using namespace std;

int main() {

    while(1) {
        int input;
        cout << "---> ";
        cin >> input;
        getchar();
        if(cin.fail()) {
            char rd = cin.get();
            getchar();
            cout << "failure" << rd << "=" << cin.fail() << " " << endl;

        }
    }
    return 0;
}
#包括
#包括
使用名称空间std;
int main(){
而(1){
int输入;
cout>输入;
getchar();
if(cin.fail()){
char rd=cin.get();
getchar();

cout获取输入整数后,按enter键时会得到一个换行符作为字符。与字符输入相同

#include <iostream>
#include <string>
using namespace std;

int main() {

    while(1) {
        int input;
        cout << "---> ";
        cin >> input;
        getchar();
        if(cin.fail()) {
            char rd = cin.get();
            getchar();
            cout << "failure" << rd << "=" << cin.fail() << " " << endl;

        }
    }
    return 0;
}
#包括
#包括
使用名称空间std;
int main(){
而(1){
int输入;
cout>输入;
getchar();
if(cin.fail()){
char rd=cin.get();
getchar();

cout获取输入整数后,按enter键时会得到一个换行符作为字符。与字符输入相同

#include <iostream>
#include <string>
using namespace std;

int main() {

    while(1) {
        int input;
        cout << "---> ";
        cin >> input;
        getchar();
        if(cin.fail()) {
            char rd = cin.get();
            getchar();
            cout << "failure" << rd << "=" << cin.fail() << " " << endl;

        }
    }
    return 0;
}
#包括
#包括
使用名称空间std;
int main(){
而(1){
int输入;
cout>输入;
getchar();
if(cin.fail()){
char rd=cin.get();
getchar();
coutcin.fail()检测输入的值是否符合变量中定义的值。
但如果cin.fail()为真,则表示

a) 输入的值与变量不匹配

b) 变量E不会受到影响

c) 河道内的水流仍然断流

d) 输入的值仍在缓冲区中,将用于下一条“cin>>变量”语句

因此,您必须执行以下操作:

a) 通过cin.clear()修理内流

b) 用cin.ignore(std::numeric_limits::max(),'\n')清除缓冲区

#包括
#包括
使用名称空间std;
int main(){
而(1){
int输入;
cout>输入;
if(cin.fail()){
char rd=cin.get();
coutcin.fail()检测输入的值是否符合变量中定义的值。
但如果cin.fail()为真,则表示

a) 输入的值与变量不匹配

b) 变量E不会受到影响

c) 河道内的水流仍然断流

d) 输入的值仍在缓冲区中,将用于下一条“cin>>变量”语句

因此,您必须执行以下操作:

a) 通过cin.clear()修理内流

b) 用cin.ignore(std::numeric_limits::max(),'\n')清除缓冲区

#包括
#包括
使用名称空间std;
int main(){
而(1){
int输入;
cout>输入;
if(cin.fail()){
char rd=cin.get();
coutcin.fail()检测输入的值是否符合变量中定义的值。
但如果cin.fail()为真,则表示

a) 输入的值与变量不匹配

b) 变量E不会受到影响

c) 河道内的水流仍然断流

d) 输入的值仍在缓冲区中,将用于下一条“cin>>变量”语句

因此,您必须执行以下操作:

a) 通过cin.clear()修理内流

b) 用cin.ignore(std::numeric_limits::max(),'\n')清除缓冲区

#包括
#包括
使用名称空间std;
int main(){
而(1){
int输入;
cout>输入;
if(cin.fail()){
char rd=cin.get();
coutcin.fail()检测输入的值是否符合变量中定义的值。
但如果cin.fail()为真,则表示

a) 输入的值与变量不匹配

b) 变量E不会受到影响

c) 河道内的水流仍然断流

d) 输入的值仍在缓冲区中,将用于下一条“cin>>变量”语句

因此,您必须执行以下操作:

a) 通过cin.clear()修理内流

b) 用cin.ignore(std::numeric_limits::max(),'\n')清除缓冲区

#包括
#包括
使用名称空间std;
int main(){
而(1){
int输入;
cout>输入;
if(cin.fail()){
char rd=cin.get();
库特