【问题标题】:do-while loop with chars带字符的 do-while 循环
【发布时间】: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;
}

【问题讨论】:

  • &lt; 'A'和&gt; 'D'同时是什么字母?
  • 正如 idclev 指出的,没有字母小于 A 且大于 D,所以循环永远不会循环。
  • 我基于这里列出的 ASCII 值 en.cppreference.com/w/cpp/language/ascii
  • @JustinMcCown 那么小于 65 (A) 和大于 68 (D) 的数字是多少?没有了。您正在测试一个数字是否小于 65 和大于 68。没有数字符合条件。
  • @JustinMcCown 你可能打算写testAnswers[i] &lt; 'A' || testAnswers[i] &gt; 'D'作为继续循环的条件。

标签: c++ validation input char


【解决方案1】:

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

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

【讨论】:

  • 几乎!但是,如果您给出的测试 not true,则需要运行循环:while (!(testAnswers[i] &gt;= 65 &amp;&amp; testAnswers[i] &lt;= 68));.
猜你喜欢
  • 2015-05-21
  • 1970-01-01
  • 2020-12-30
  • 1970-01-01
  • 1970-01-01
  • 2021-03-08
  • 2018-05-09
  • 2015-07-03
  • 2016-02-21
相关资源
最近更新 更多