无论我使用什么,我的输入都会被跳过
My input is getting skipped no matter what I use
我正在尝试让用户输入三个输入:用户名、ID 和备用 ID。如果用户输入 return 作为用户名,程序应该结束。如果用户输入用户名并为接下来的两个 id 输入 return,则输入应显示为无效。我尝试过使用 cin、fgets 和 get(我知道 get 通常是糟糕的编程)。当我使用 cin 时,我尝试使用 cin.clear() 和 cin.ignore() 来跳过换行符条目。第一个输入始终有效,但第二个输入调用一直被跳过。
代码片段:
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!
这是我编写的一个快速小程序,它能解决您的问题吗?
cin 本身可以读取换行符,而 cin >>
... 将换行符视为空格并忽略它们。 cin.getline(...)
和 std::getline(cin, ...)
将从 cin
读取并丢弃换行符,然后停止读取。
所以看看这是否适合你。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string name = "";
string uwfId = "";
string altId = "";
cout << "\nName> ";
getline(cin, name);
if(name == "" )
return 0;
cout << "\nUWF ID> ";
getline(cin, name);
cout << "\nAlternate ID> ";
getline(cin, name);
if(uwfId == "" || altId == "")
{
cout << "\nInvalid!";
return 1;
}
return 0;
}
我正在尝试让用户输入三个输入:用户名、ID 和备用 ID。如果用户输入 return 作为用户名,程序应该结束。如果用户输入用户名并为接下来的两个 id 输入 return,则输入应显示为无效。我尝试过使用 cin、fgets 和 get(我知道 get 通常是糟糕的编程)。当我使用 cin 时,我尝试使用 cin.clear() 和 cin.ignore() 来跳过换行符条目。第一个输入始终有效,但第二个输入调用一直被跳过。
代码片段:
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!
这是我编写的一个快速小程序,它能解决您的问题吗?
cin 本身可以读取换行符,而 cin >>
... 将换行符视为空格并忽略它们。 cin.getline(...)
和 std::getline(cin, ...)
将从 cin
读取并丢弃换行符,然后停止读取。
所以看看这是否适合你。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string name = "";
string uwfId = "";
string altId = "";
cout << "\nName> ";
getline(cin, name);
if(name == "" )
return 0;
cout << "\nUWF ID> ";
getline(cin, name);
cout << "\nAlternate ID> ";
getline(cin, name);
if(uwfId == "" || altId == "")
{
cout << "\nInvalid!";
return 1;
}
return 0;
}