在结构中使用getline获取char类型名称

时间:2015-07-12 11:10:38

标签: c++

当我声明一个结构数组时:struct name data [5]; 当我尝试使用cin.getline(data [i] .full_name,75)(我需要)进行输入时,然后在第一次跳过char输入后。我在这个网站上搜索并使用了fgets,但没有用。  代码是:

$db = db::getInstance();

2 个答案:

答案 0 :(得分:1)

这是我的建议希望它有所帮助:

void input(struct name data[])
{
   int i=0;
   int number;
   char asciNumber[75];
   while(i<5)
   {
      cout<<"Enter the name: ";      
      cin.getline(data[i].full_name,75);     
      cout<<"Enter the number: ";
      cin.getline(asciNumber,75);     
      try
      {
          number = atoi(asciNumber);
          data[i].number = number;
      }
      catch (...)
      {
          //cout << "error in number parsing" << endl;
          // i think its important to check validity of std input\
      }
      i++;
   }
}

答案 1 :(得分:0)

嗯,首先,你根本不能使用fgets()。混合C库的基于stdin的函数和C ++库的std::cin的结果是未定义的。

但你真正的问题是:

cin>>data[i].number;

您的意图是阅读包含数字的一行文字。

如您所知,每行文字都以换行符结束。

>>运算符将读取输入的数字,但它实际上不会读取其后面的换行符。

因此,在循环的下一次迭代中:

cin.getline(data[i].full_name,75)

然后,所有这些都将立即读取输入的数字后的换行符,而不是下一行文本。

您需要将>>运算符的用法替换为另一个getline(),其中将下一行文本读入std::string,然后使用std::istringstream将其转换为数字。

这是最干净的实施。还有其他几种可能性,例如手动读取号码后的换行符,或者另一个,扔掉std::getline()的电话。