在 Do while 语句中发出不断循环的问题

Issue in Do while statement that keeps looping itself

我试图强制用户只能在 R 、 C 或 T 之间进行选择。但是我发表了声明,它一直要求我重新输入一个输入,因为它试图说给定的字母不是其中之一。还要验证我尝试打印 hello 但它没有被打印出来,这意味着该软件仍然停留在 do while 语句。有什么帮助吗? 我的代码:

#include <stdio.h>

int main()
{
    char a;
    do 
    {
        printf ("Choisit parmis R , C ou T\n");
        scanf("%c", &a);
    } while (!((a == "R") ||(a == "T") ||(a == "C") ));
    printf("hey");
    return 0;
}

看到这里有一个很小的问题。我假设您刚刚学习了一种让您感到困惑的语言,例如 python。在 C 中,双引号内的字符串表示字符串,而单引号内的字符串表示字符。检查这个

var c = "C";//This is a string
var c = 'C';//This is a char

所以你正在比较永远不会相等的字符串和字符
至于你的代码,写

#include <stdio.h>

int main()
{
    char a;
    do 
    {
        printf ("Choisit parmis R , C ou T\n");
        scanf("%c", &a);
    } while (!((a == 'R') ||(a == 'T') ||(a == 'C') ));
    printf("hey");
    return 0;
}

您将字符 a 与字符串“R”、“T”和“C”进行比较,这不是您想要的。你想与单个字符进行比较,它是这样写的:

while (!((a == 'R') ||(a == 'T') ||(a == 'C') ));

注意单引号' '用于写字符常量

初学者使用

scanf( " %c", &a );
       ^^^^^

而不是

scanf( "%c", &a );
       ^^^^

否则该函数也将读取空格。

"R""T""C" 是类型为 char[2] 的字符串文字。在极少数情况下用于表达式时,它们被转换为指向其第一个 char *.

类型元素的指针

所以实际上您是在尝试将字符与指针进行比较。

您必须使用字符、文字 'R''T'C'

而不是字符串文字

所以循环的条件可以看起来像

} while ( a != 'R' && a != 'T' && a != 'C' );