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

时间:2015-02-25 12:29:12

标签: c++ types integer character primitive-types

#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;)时,为什么编译器会跳过它而不显示任何问题。

2 个答案:

答案 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 ,因此输入被跳转到下一个字段,但现在我们使用缓冲区字符来存储它。