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

问题描述

我试图强迫用户仅在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;
}

解决方法

对于初学者使用

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

代替

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

否则,该函数还将读取空格。

"R""T""C"是类型为char[2]的字符串文字。在极少数例外的表达式中使用,它们会转换为指向char *类型的第一个元素的指针。

实际上,您正在尝试将字符与指针进行比较。

您不必使用字符串,字面量'R''T'C'

所以循环的条件看起来像

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

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

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

因此,您正在比较一个永远不会相等的字符串和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') ));

请注意,单引号''用于编写字符常量。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...