【发布时间】:2017-10-13 19:20:02
【问题描述】:
我是 C++ 计算机科学入门课程的学生,这是我第一次在这里发帖。我们刚刚了解了 while 循环,虽然分配不需要它,但我正在尝试对此分配进行输入验证。该程序旨在读取一个数字列表并找出该列表中第一个和最后一个 8 的位置。所以如果我有四个数字(1、8、42、8)的列表,那么前8位和后8位分别是2和4。集合的大小由用户决定。
我试图创建一个 while 循环来测试以确保用户输入的内容实际上是一个数字,但是当我尝试输入类似“.”的内容时或“a”循环无限地进行并且不会终止。我找不到我的错误,据我所知,我使用的语法与教科书中的语法完全相同。有人可以告诉我我的 while 循环有什么问题吗?
int numbers, //How large the set will be
num, //What the user enters for each number
first8position = 0, //The first position in the set that has an 8
last8position = 0; //The last position in the set that has an 8
//Prompt the user to get set size
cout << "How many numbers will be entered? ";
cin >> numbers;
//Loop to get all the numbers of the set and figure out
//which position the first and last 8 are in
for (int position = 1; position <= numbers; position++)
{
cout << "Enter num: ";
cin >> num;
//If num isn't a digit, prompt the user to enter a digit
while (!isdigit(num))
{
cout << "Please enter a decimal number: ";
cin >> num;
}
//If num is 8, and first8position still isn't filled,
//set first8position to the current position.
//Otherwise, set last8position to the current position.
if (num == 8)
{
if (first8position == 0)
first8position = position;
else
last8position = position;
}
}
//If the set had an 8, print what its position was
if (first8position != 0)
cout << "The first 8 was in position " << first8position << endl;
//If there was more than one 8, print the last 8 position.
//Otherwise, the first and last 8 position are the same.
if (last8position != 0)
cout << "The last 8 was in position " << last8position << endl;
else
cout << "The last 8 was in position " << first8position << endl;
//If there were no 8s, say so.
if (first8position == 0)
cout << "Sorry, no eights were entered.";
return 0;
}
【问题讨论】:
-
您也没有正确使用
std::isdigit。要了解它是如何工作的,请参阅:en.cppreference.com/w/cpp/string/byte/isdigit
标签: c++ validation