C ++跳过新的线路密钥?

时间:2015-01-13 13:56:22

标签: c++ cin getline

我试图让用户输入一些数据,然后将其存储在一个结构中,但是我知道应该使用哪个功能以及它们的区别是什么? 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.

1 个答案:

答案 0 :(得分:0)

对于这种情况,你应该使用cin.getline(),而不需要cin.ignore。

Here is an examination of the two methods - std::cin.getline( ) vs. std::cin

另外,检查你的parseName函数并尝试在没有任何用户I / O的情况下单独测试它。