Error : Wrong comparison between pointer and integer

Error : Wrong comparison between pointer and integer

我的代码看起来没问题,但是我收到这个警告(警告:指针和整数之间的比较),解决这个问题的最佳方案是什么? 我已经对 (char exit = "E") 使用了双符号标记,也对 while 使用了相同的东西但同样的问题。

#include <stdio.h>

int main()
{
    char c[1];
    char exit = 'E';

    while (c != exit)
    {
        printf("Enter a character\n\n");
        scanf("%s", c);
        printf("your character is : %s\n-------------------\n", c);
    }
}

我相信这就是你想要做的。

警告是因为你没有初始化你的角色,而且你正在比较角色的地址和角色值。

#include <stdio.h>

int main()
{
    char c[1];
    char exit = 'E';

    while ((c[0]=getchar()) != exit)
    {
        if(c[0]==EOF)break;
        printf("your character is : %c\n",c[0]) ;
    }
    printf("ended");
}
#include <stdio.h>

int main()
{
    char c[1];
    char exit = 'E';

    while (c != exit)  // here ...
    {
        printf("Enter a character\n\n");
        scanf("%s", c);
        printf("your character is : %s\n-------------------\n", c);
    }
}

您正在尝试将 char 与数组 c 衰减到的指针进行比较。您可能想要做的是将数组的第一个字符与字符 exit:

进行比较
while (c[0] != exit)

但这仍然没有多大意义,因为 c 未初始化并且用户还没有机会进行任何输入。最好使用 do ... while 循环:

#include <stdio.h>

int main()
{
    char c[1];
    char exit = 'E';

    do {
        printf("Enter a character\n\n");
        scanf("%s", c);
        printf("your character is : %s\n-------------------\n", c);
    } while (c[0] != exit);
}

接下来的事情是,scanf("%s", c); 可能会失败(是的,不太可能,但有可能)。并且用户可以输入比数组 c 中的空间更多的字符。永远不要在不检查 return 值的情况下使用 scanf(),也不应在不为转换说明符指定 WIDTH 的情况下使用 "%s" 来限制放入数组的字符。

当读取字符串时,您需要存储 WIDTH 个字符 + 终止符 '[=26=]'。所以如果你想读取一个字符的字符串,数组必须至少有 2 个元素:

#include <stdlib.h
#include <stdio.h>

int main()
{
    char c[2];
    char exit = 'E';

    do {
        printf("Enter a character\n\n");
        while (scanf("%1s", c) != 1 ) {
            fputs("Input error!\n");
            return EXIT_FAILURE;
        }
        printf("your character is : %s\n-------------------\n", c);
    } while (c[0] != exit);
}

但是如果你只想读一个字符,你最好使用 getchar():

#include <stdio.h>
{
    int ch;
    while (printf("Enter a character\n\n"),
           (ch = getchar()) != EOF && ch != 'E')
    {
        printf("your character is: %c\n-------------------\n", (char) ch);
    }    
}