цикл выполнения во время выполнения с символами

#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)); .