后一个整数数据类型和连续两个字符类型。第二个字符数据类型跳过....为什么?

After a integer data type and consecutive two character type. The 2nd character data type skips....Why?

#include<iostream>
using namespace std;
int main()
{
    int n=0;
    char name[20];
    char address[50];

    cout<<"Enter a Number";
    cin>>n;

    cout<<"Enter a Name ="; // HERE
    gets(name);

    cout<<"Enter a Address=";
    gets(address);

    cout<<"Number ="<<n<<endl;
    cout<<"Name = "<<name<<endl;
    cout<<"Address = "<<address<<endl;
}

它有一个 Integer 类型和两个 char 类型的数组..当程序到达 ("Enter a name") 为什么编译器会跳过它而没有显示任何问题。

因为当你使用cin获取整数时,你按下结束输入的换行符留在输入缓冲区中,所以当你下次获取一行时gets函数将看到这个换行符并将其作为空行读取。

您可以要求 cin 忽略输入,直到(包括)下一个换行符

cin.ignore(numeric_limits<streamsize>::max(), '\n');

这是一个稍微修改过的代码:

#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int n=0;
char name[20],c;
char address[50];
cout<<"Enter a Number";
cin>>n;
c = getchar();
cout<<"Enter a Name =";
gets(name);
cout<<"Enter a Address=";
gets(address);
cout<<"Number ="<<n<<endl;
cout<<"Name = "<<name<<endl;
cout<<"Address = "<<address<<endl;
}

这里我只做了一个修改:输入数字后取一个字符输入。此字符存储您在键入输入后按的 \nEnter。早些时候,Name 字段存储了 \n,因此输入会跳到下一个字段,但现在我们使用了一个缓冲区字符来存储它。