如何让 GCC 编译器工作?

如何让 GCC 编译器工作?

我是 C 语言编程的新手。我使用 Vim 作为编辑器,使用 GCC 作为编译器,但效果并不理想。假设我正在编写一个基本程序来确定某个数字是奇数还是偶数。这是我的代码:

#include <stdio.h>

int main(int argc, char argv[])
{
    int i;

    printf("Enter a number: ");
    scanf("%d\n", &i);

    printf("%d\n", i);
    if(i % 2 == 0)
    {
        printf("Your number is even.\n");
    }
    else if(i % 2 != 0)
    {
        printf("Your number is odd.\n");
    }
    else
    {
        printf("Invalid input.\n");
    }

    getchar();

    return 0;
}

我不确定是我编程错了,还是 GCC 不是一个好的编译器,或者其他什么原因。我正在运行 Linux,它与 Windows 一起启动。现在我按CTRL-D来停止该过程,然后它才会打印回我的数字,并告诉我它是奇数还是偶数。不仅仅是这个,很多具有类似格式的其他程序似乎也这样做。

~ $ ./test
Enter a number: 45
45                         //I press enter, nothing happends. Ctrl-d 
Your number is even.       //ctrl-d again
~ $ 

答案1

啊,不管怎样。无论如何我都会试着回答。

简短回答:从 scanf 的参数中删除\n。当我这样做时,您的代码会按预期运行(好吧,为了挑剔,我还必须将其更改argv[]*argv[]。)

较长的回答是:您实际上不应该使用 scanf;它通常会给您带来麻烦。

嗯... 我的长答案比短答案要短。算了。

答案2

我不确定我是否编程错误,或者 gcc 不是一个好的编译器,或者其他什么。

第一个:scanf("%d\n", &i);应该是scanf("%d", &i);

还有其他错误:

  • 的第二个参数main()应该转换为指向字符数组的指针或者指向字符的指针:char *argv[]char **argv
  • 如果i不是数字,它仍将在if(i % 2 == 0)和中转换为整数else if(i % 2 != 0),以便对表达式进行求值(实际上,您永远不会else使用该代码到达该块,因为if(i % 2 == 0)else if(i % 2 != 0)i隐式转换为整数,将求值为 true)。请阅读寻找更合适的方法来检查字符串是否为数字。

相关内容