【发布时间】:2021-01-31 11:23:49
【问题描述】:
我正在尝试将用户输入到数组中的字符与一些 ASCII 值进行比较。用户应该在 testAnswers[i] 中输入 20 个测试问题的答案,以查看它们是否匹配字母 A-D(大写,因此 toupper)。但是,当程序运行时,do-while 循环似乎完全被忽略了,您可以毫无问题地输入几乎任何字符。我将如何解决这个问题?这是我的代码:
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
int main()
{
char testAnswers[20];
char answers[] = {'A', 'D', 'B', 'B', 'C', 'B', 'A', 'B', 'C', 'D', 'A', 'C', 'D', 'B', 'D', 'C', 'C', 'A', 'D', 'B'};
int testSize = sizeof(answers) / sizeof(answers[0]);
cout << "Enter the student's test scores: ";
for (int i=0; i<testSize; i++) {
do {
cin >> testAnswers[i];
testAnswers[i] = toupper(testAnswers[i]);
} while (testAnswers[i] < 'A' && testAnswers[i] > 'D');
}
for (int i=0; i<testSize; i++)
cout << testAnswers[i];
return 0;
}
【问题讨论】:
-
< 'A'和> 'D'同时是什么字母? -
正如 idclev 指出的,没有字母小于 A 且大于 D,所以循环永远不会循环。
-
我基于这里列出的 ASCII 值 en.cppreference.com/w/cpp/language/ascii
-
@JustinMcCown 那么小于 65 (
A) 和大于 68 (D) 的数字是多少?没有了。您正在测试一个数字是否小于 65 和大于 68。没有数字符合条件。 -
@JustinMcCown 你可能打算写
testAnswers[i] < 'A' || testAnswers[i] > 'D'作为继续循环的条件。
标签: c++ validation input char