Getline跳上下一个cin并跳过前一个cin

时间:2014-02-28 17:31:45

标签: c++ turbo-c++

我正在尝试使用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次。

1 个答案:

答案 0 :(得分:1)

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