后一个整数数据类型和连续两个字符类型。第二个字符数据类型跳过....为什么?
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;
}
这里我只做了一个修改:输入数字后取一个字符输入。此字符存储您在键入输入后按的 \n 或 Enter。早些时候,Name 字段存储了 \n,因此输入会跳到下一个字段,但现在我们使用了一个缓冲区字符来存储它。
#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;
}
这里我只做了一个修改:输入数字后取一个字符输入。此字符存储您在键入输入后按的 \n 或 Enter。早些时候,Name 字段存储了 \n,因此输入会跳到下一个字段,但现在我们使用了一个缓冲区字符来存储它。