我是 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)。请阅读这寻找更合适的方法来检查字符串是否为数字。