我正在尝试使用getline()但是在输入第一个记录光标后,不要等待第二个国家名称,它会跳过并跳过大写名称。我的错误在哪里如果我输入
国家:印度
资本:德里字体:57382左右这些价值没有任何问题,但光标不等待下一个国家在输入人均价值后直接跳入资本
#include<iostream.h>
#include<conio.h>
#include <string.h>
struct country
{
char nm[30];
char capital[30];
float income;
};
void main()
{
country c[5];
clrscr();
for( int i=0; i<5 ; i++)
{
cout << "\n Country's name : ";
cin.getline(c[i].nm, 30);
cout << "\n Country's capital :";
cin.getline(c[i].capital,30);
system("cls");
cout << "\n Per capita income :";
cin >> c[i].income;
}
我通过添加cin.ignore();
修改了代码 for( int i=0; i<5 ; i++)
{
cout << "\n Country's name : ";
cin.getline(c[i].nm, 30);
cin.ignore();
cout << "\n Country's capital :";
cin.getline(c[i].capital,30);
cin.ignore();
cout << "\n Per capita income :";
cin >> c[i].income;
cin.ignore();
}
但是在此getline()等待下一个国家之后,它现在正在等待每次进入Country,Capital和Capita之后。意思是我输入
国家:印度//按回车//等待我按下此处输入
首都:德里//按下输入//等待我按下此处输入
Capita: 32323 //按enter //等待我按下此处
相同5次。
答案 0 :(得分:1)
因为cin >>
不使用您输入的数字后面的行尾字符。这些字符保留在输入缓冲区中。下次调用getline()
时,它会找到换行符,并假设用户只需按Enter即可输入空字符串。