int main() {
Population town;
int population;
int numBirths, numDeaths;
string city, intTest;
bool isValid = true;
do {
cout << "Enter name of city: ";
getline(cin, city);
for (int i = 0; i < city.length(); i++) {
if (!isalpha(city[i])) {
isValid = false;
break;
}
}
} while(!isValid);
没有正确检查输入是否为字符串。不确定代码是什么问题。
答案 0 :(得分:1)
if (!(isalpha(city[i]))) {
isValid = false;
}
else {
isValid = true;
break;
}
此循环第一次找到字母字符时,它会将isValid
设置为true,然后退出循环。如您的代码所示,如果字符串中有任何字母字符,则isValid
为true,否则在循环后为false。
你可能真的想要这样的东西:
string city; //populate this
bool isValid = true; //Innocent till proven guilty
do {
city = ... ; //get new city
isValid = true; //Don't forget to reset!!
for (int i = 0; i < city.length(); i++) {
if(!isalpha(city[i])) {
isValid = false;
break; //If we're invalid, doesn't matter what the rest is
}
}
while(!isValid);
此外,无论出于何种原因,您都会两次阅读city
。
首先你读了一个单词:
cin >> city;
然后你读了一整行:
getline(cin, city);
如果城市只是一个单词,请使用第一个单词并删除第二个单词。否则,如果城市将是多个单词(用户将通过换行符输入(输入键)),请删除第一个并使用第二个。
答案 1 :(得分:0)
您使用两行来阅读city
。
cin >> city;
getline(cin, city);
你只需要其中一个。
如果城市名称中不包含空格,则对于您的应用程序,请使用第一个。否则,使用第二个。不要同时使用它们。