错误:指针与整数之间的比较错误

时间:2018-10-21 12:10:10

标签: c string pointers char warnings

我的代码看起来不错,但是我得到了这个警告(警告:指针与整数之间的比较),解决此问题的最佳解决方案是什么? 我已经对(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);
    }
}

2 个答案:

答案 0 :(得分:0)

#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所不能容纳的字符数。在未为转换说明符指定scanf()来限制放入数组的字符的情况下,切勿使用"%s"而不检查返回值或WIDTH

读取字符串时,您需要存储WIDTH个字符和一个终止符'\0'。因此,如果要读取一个字符的字符串,则数组必须至少包含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);
    }    
}

答案 1 :(得分:-1)

我相信这就是您要尝试做的事情。

警告是因为您尚未初始化字符,而且还正在将字符地址与字符值进行比较。

#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");
}