#c #validation #input #char
#c #проверка #ввод #символ
Вопрос:
Я пытаюсь сравнить символ, введенный в массив с помощью пользовательского ввода, с некоторыми значениями ASCII. Предполагается, что пользователь должен ввести 20 ответов на тестовые вопросы в testAnswers [i], чтобы проверить, соответствуют ли они буквам 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' amp;amp; testAnswers[i] > 'D');
}
for (int i=0; i<testSize; i )
cout << testAnswers[i];
return 0;
}
Комментарии:
1. какая буква
< 'A'
и> 'D'
в то же время?2. Как указывает idclev, ни одна буква не меньше A и не больше D, поэтому цикл никогда не будет зацикливаться.
3. Я основывал его на значениях ASCII, перечисленных здесь en.cppreference.com/w/cpp/language/ascii
4. @JustinMcCown Итак, какое число меньше 65 (
A
) и больше 68 (D
)? Их нет. Вы проверяете, является ли число меньше 65 и больше 68. Число не подходит.5. @JustinMcCown Вы, вероятно, имели в виду написать
testAnswers[i] < 'A' || testAnswers[i] > 'D'
как условие для продолжения цикла.
Ответ №1:
Вы проверяете, имеет ли символ значение ASCII меньше 65 и больше 68.Чтобы проверить, является ли символ символом между A и D, вы должны проверить, имеет ли символ значение ASCII больше, чем равно 65, и меньше, чем равно 68
do
{
// code statement
}while(testAnswers[i] >= 65 amp;amp; testAnswers[i] <= 68 );
Комментарии:
1. Почти! Но вам нужно запустить цикл, если заданный вами тест неверен :
while (!(testAnswers[i] >= 65 amp;amp; testAnswers[i] <= 68));
.