【发布时间】:2015-03-11 12:10:13
【问题描述】:
我试图让用户输入一些数据,然后将其存储在一个结构中,但是我不知道应该使用哪个函数以及有什么区别? 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 将名称拆分为最后一个和第一个。
我一直在阅读一些函数,例如 cin.ignore() 和 noskipws,但不知道如何使用它们。顺便说一句,用户应该输入数据的方式是“last, first”,后面有逗号和空格(这是解析函数要查找的内容)。
我也不确定地址部分是否是最好的方法,我有结构 myData.address 是一个字符数组,因为我不知道如何处理字符串。我仍然对 C++ 没有信心。感谢您的帮助。
编辑:如果我注释掉 ID 和地址部分,程序会自行循环 6 次,说我有一个无效条目(这是 main 的一部分),所以在我按下 Enter 后它会读取 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.
【问题讨论】:
-
当它崩溃时会发生什么?请将此设为MCVE。
-
你怎么知道它因为换行而崩溃?您是否测试过解析和其他所有内容?尝试隔离您的问题。在我看来,你有 3 个地方可能会爆炸。还有一个指南如何编写“为什么我的代码不起作用”问题。
-
确保您的地址有足够的空间来保存您尝试复制到其中的地址。
-
另外,只注释掉地址部分,然后运行它看看是否仍然出现该错误。
-
添加了,在EDIT部分。