gpt4 book ai didi

c - 错误: Wrong comparison between pointer and integer

转载 作者:行者123 更新时间:2023-11-30 18:11:01 25 4
gpt4 key购买 nike

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

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

关于c - 错误: Wrong comparison between pointer and integer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52915174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com