当我声明一个结构数组时:struct name data [5]; 当我尝试使用cin.getline(data [i] .full_name,75)(我需要)进行输入时,然后在第一次跳过char输入后。我在这个网站上搜索并使用了fgets,但没有用。 代码是:
$db = db::getInstance();
答案 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
()的电话。