我试图让用户输入一些数据,然后将其存储在一个结构中,但是我知道应该使用哪个功能以及它们的区别是什么? cin或getline()?我使用的任何一种功能,似乎都需要使用' \ n'密钥并使我的程序崩溃,但如果这是问题,我不是100%...因为它一直在崩溃。
我和他们两个一起玩过,这就是我所拥有的。
string temp;
int id;
cout << endl << "Full name (last, first): ";
cin >> temp;
cin.ignore(1, '\n');
myData[fileSize] = parseName(temp);
cout << endl << "ID: ";
cin >> id;
myData[fileSize].id = id;
cout << endl << "Address: ";
cin >> temp;
temp.copy(myData[fileSize].address, temp.length(), 0);
变量fileSize是数组当前所在的元素,函数parseName将名称拆分为last和first。
我一直在阅读cin.ignore()和noskipws等几个函数,但不知道如何使用它们。顺便说一下,用户输入数据的方式是“#last; first&#34;”,之后是逗号和空格(这就是解析函数正在查找的内容)。
另外我不确定地址部分是否是最好的方法,我的结构myData.address是一个字符数组,因为我不知道如何使用字符串。我对C ++仍然没有信心。谢谢你的帮助。
编辑:如果我注释掉ID和地址部分,程序会自行循环6次,说我有一个无效的条目(这是主要的一部分),所以在按下回车后它会读取6或7个键。 如果我按照原样保留所有内容,这就是我得到的。 Full name (last, first): terminate called after throwing an instance of 'std::ou
t_of_range'
what(): basic_string::copy
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
Process returned 3 (0x3) execution time : 4.328 s
Press any key to continue.
答案 0 :(得分:0)
对于这种情况,你应该使用cin.getline(),而不需要cin.ignore。
Here is an examination of the two methods - std::cin.getline( ) vs. std::cin
另外,检查你的parseName函数并尝试在没有任何用户I / O的情况下单独测试它。