首页 > 解决方案 > 带字符的 do-while 循环

问题描述

我正在尝试将通过用户输入输入到数组中的字符与一些 ASCII 值进行比较。用户应该在 testAnswers[i] 中输入 20 个测试问题的答案,以查看它们是否与字母 AD(大写,因此 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;
}

标签: c++validationinputchar

解决方案


您正在检查 char 的 ASCII 值是否小于 65 且大于 68。要检查 char 是否是 A 和 D 之间的字符,您必须检查 char 的 ASCII 值是否大于等于 65 且小于等于68

do
{
    // code statement
}while(testAnswers[i] >= 65 && testAnswers[i] <= 68 );

推荐阅读