获取线跳到下一个 cin 并跳过上一个 cin

Getline jump on next cin and skip the previous cin

本文关键字:cin 上一个 下一个 获取      更新时间:2023-10-16

我正在尝试使用 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() 等待下一个国家/地区,但现在它正在等待每个国家、首都和首都条目之后。意味着我进入

国家:印度//按回车键/

/等待,我在这里
按回车键 首都:德里//按回车键//等待,我在这里按回车键
: 32323//按回车键//等待,我在这里按回车键

相同5次。

因为cin >>不会使用您键入的数字后面的行尾字符。这些字符保留在输入缓冲区中。下次调用 getline() 时,它会找到换行符,并假定用户只需按 Enter 即可输入空字符串。