c - 警告 : comparison between pointer and integer [enabled by default]

标签 c

所以,我只是在练习 C 语言(我是初学者),但我现在陷入了这个程序:

#include <stdio.h>
#include <string.h>

int main(){
    int numbers[12] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37};
    int i;
    int *point;

    point = numbers;

    while(i){

        printf("Write number in ranging 1 - 40: \n");
        scanf("%d", &numbers);

        if (numbers, point){
            printf("Your number is prime number.\n");
        }
        else if ((numbers <= 0) || (numbers >= 41)){
            printf("Only numbers: 1 - 40.\n");
        }
        else{
            printf("Try again.\n");
        }

        i;
    }
    return 0;
}

当我想编译它时,我只是收到此错误消息:

test.c: In function ‘main’:

test.c:19:38: warning: comparison between pointer and integer [enabled by default]

我查看了 Stack Overflow,但没有找到类似的主题,对我没有帮助。

最佳答案

即使您是初学者,您仍然应该努力告诉我们哪些行给您带来了错误,因为准确说出第 19 号行并不容易。

我认为这条线给你带来了麻烦。

if (numbers, point){    // bad

您可能想调用一些需要 numbers 的函数和point作为一个论点。现在,这个 if 语句将始终评估为 true,因为您使用的是逗号运算符,它只使用其右侧的值,该值恰好是一个非空指针 ( point )。怎么样:

if is_a_prime(numbers, point)

继续,实际导致错误的行很可能是这一行:

 else if ((numbers <= 0) || (numbers >= 41)){    // bad

numbers是一个数组,写numbers <= 0没有多大意义。也许你想写 numbers[0] <= 0 ,或*point <= 0 ,或者您可能想使用 for循环迭代数组中的每个数字以确保它是正数。

此外,(感谢 isedev 看到这一点),你从未设置 i在访问它之前将其设置为任何值,因此您的程序将具有未定义的行为。尝试写类似 i = 1; 的内容靠近顶部。

关于c - 警告 : comparison between pointer and integer [enabled by default],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26145691/

相关文章:

c - typedef 和 define 的区别

c - 数组输入中的括号是什么意思

c - 如何在 C 中取消声明(删除)变量?

c++ - 蹩脚的 wav 到数组,然后用 c/c++ 返回 wav

并发线程和全局变量

c - 如何制作递归函数,将大写字母放在第一个字母和这个 '.' 字符之后

c - strlen(s) 和 (strlen)(s) 之间有什么区别吗?

c - 如何使用 setsockopt 将 ToS 添加到流中?

c - Readline:在 SIGINT 上获取新提示

c - R CMD SHLIB 编译 C 代码时出错