#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类型的数组..当程序到达(&#34;输入名称&#34;)时,为什么编译器会跳过它而不显示任何问题。
答案 0 :(得分:1)
因为当您使用cin
获取整数时,您按下以结束输入的换行符将保留在输入缓冲区中,因此当您下次获取一行时,gets
函数将看到此换行符并将其读作空行。
您可以要求cin
忽略输入,直到(并包括)下一个换行符
cin.ignore(numeric_limits<streamsize>::max(), '\n');
答案 1 :(得分:0)
这是一个稍微修改过的代码:
#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 ,因此输入被跳转到下一个字段,但现在我们使用缓冲区字符来存储它。