【发布时间】:2019-03-20 21:20:41
【问题描述】:
#include <iostream>
#include <string>
using namespace std;
struct UserInfo{
string userPhoneNumber;
string userName ;
string userAddress ;
};
int main ()
{
cout << "How many Entries do you want to enter?";
int userAmountSelection;
cin >> userAmountSelection;
UserInfo userOne [userAmountSelection];
for (int i = 0; i < userAmountSelection; i++){
cout << "Please enter your first and last name: ";
cin.ignore(); // possible problem in code
getline (cin, userOne[i].userName, '\n');
cout << "Please Enter your address, " << userOne[i].userName << ":";
cin.ignore(); // possible problem in code
getline (cin, userOne[i].userAddress, '\n');
cout << "Please enter your phone#: ";
cin.ignore (); // possible problem in code
getline (cin, userOne[i].userPhoneNumber);
}
for (int i = 0; i < userAmountSelection; i++){
cout << userOne[i].userName << " " <<
userOne[i].userAddress << " " <<
userOne[i].userPhoneNumber << endl;
}
return 0;
}
正如您所见,它是用于学习结构和实验的简单代码。我遇到的问题似乎来自 cin.ignore () 代码。它在输出时忽略输入字符串的第一个字符。代码确实可以编译,但是输入和输出有偏差。
比如我输入一个Terry的名字,就会输出erry。
我尝试删除cin.ignore (),但是当我这样做时,输出会跳过用户需要输入数据的部分并将区域留空。
我搜索了论坛并找到了一些建议,例如向cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 添加参数。例如,但这并不能解决问题,只会添加到我遇到的错误列表中。
【问题讨论】:
-
将
ignores 放置在将不需要的内容留在流中的操作之后。如果您在操作之前ignore,您经常会发现自己丢失了您想要的数据,因为ignore没有任何数据。 -
不要将提取器与
getline混合使用。他们打架。而不是cin >> userAmountSelection;将输入读入带有getline的字符串,并将字符串中的文本转换为int。 -
@pete becker --- 我明白你在说什么,我只是尝试实现它,如果我做得正确,它会给我使用 userAmountSelection 变量的错误。我不再能够在 UserInfo userOne [userAmountSelection] 中使用它;声明。
-
使用
userAmountSelection表示数组的大小是不合法的。一些编译器将其作为扩展提供。
标签: c++