在整数数据类型和连续两个字符类型之后.第 2 个字符的数据类型跳过..为什么

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

本文关键字:数据类型 字符 之后 为什么 类型 两个 整数 连续      更新时间:2023-10-16
#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;
}

它有一个整数类型和两个字符类型的数组。当程序到达("输入名称"(时,为什么编译器跳过它而没有显示任何问题。

因为当您使用 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;
}

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