【发布时间】:2020-06-03 19:51:35
【问题描述】:
我试图让用户输入三个输入:用户名、ID 和备用 ID。如果用户输入用户名的返回,程序应该结束。如果用户输入用户名并为接下来的两个 id 输入返回值,则输入应显示为无效。我尝试过使用 cin、fgets 和 get(我知道 get 通常是糟糕的编程)。当我使用 cin 时,我尝试使用 cin.clear() 和 cin.ignore() 来跳过换行条目。第一个输入始终有效,但第二个输入调用不断被跳过。
代码sn-p:
int main(){
string name, altID, tempUWFID;
char input;
cout << "Name> ";
// if (cin.get() == '\n') - This was one way that I tried.
if ((input = getchar()) == '\n')
break;
else
cin >> name;
cout << "UWF ID> ";
if ((input = getchar()) != '\n')
cin >> tempUWFID;
cout << "Alternate ID> ";
if ((input = getchar()) != '\n')
cin >>altID;
cout << "\nThank you for abusing my program, have a nice day!\n";
输出:
Welcome to Voter's Registration
Name> johnny
UWF ID> Alternate ID>
ad
Invalid UWF ID
Name>
Thank you for abusing my program, have a nice day!
预期输出:
Welcome to Voter's Registration
Name> johnny
UWF ID> somenumber
Alternate ID> someothernumber
Invalid UWF ID
Name>
Thank you for abusing my program, have a nice day!
【问题讨论】:
-
tl;dr 如果同时使用格式化和非格式化输入,你必须非常小心,否则你会被烧毁。
-
考虑使用
std::getline,然后检查提取的字符串是否为空。
标签: c++ input user-input cin