我写了一个简单的代码来在c中查找偶数和奇数。
#include <stdio.h>
int main() {
int num;
printf("Enter an integer: ");
scanf(" %d", &num);
(num % 2 == 0) ? printf("%d is even.", num) : printf("%d is odd.", num);
return 0;
}
代码开始运行而不停止,并给出这样的消息
[Running] cd "/home/atharva/Projects/c c++/" && gcc Even_odd.c -o Even_odd && "/home/atharva/Projects/c c++/"Even_odd
我正在使用ubuntu。应该做什么?
答案1
您的程序正在运行,但您不会看到程序的任何输出,因为输出已被缓冲。
输出被缓冲,因为输出的字符串printf()
末尾没有换行符分隔。标准库将缓冲输出,直到输出换行符或直到您显式调用fflush()
输出流。进行此缓冲是为了提高效率。
一种解决方案是输出末尾带有换行符的字符串:
printf("Enter an integer:\n");
...或明确调用fflush()
:
printf("Enter an integer: ");
fflush(stdout);
但是,那正确的这样做的方法是在标准错误流上输出用于用户交互的任何文本,就像大多数其他 Unix 实用程序所做的那样:
fprintf(stderr, "Enter an integer: ");
默认情况下,标准错误流是无缓冲的。
代码中的其他printf()
语句也遇到同样的问题,并且可能应该在它们输出的字符串后附加换行符(因为它们输出结果,而不是用户交互消息)。
也可以看看:
答案2
您的示例在命令行上适用于我。
将您的代码复制到Even_odd.c
然后
make Even_odd # A quicker alternative to "gcc Even_odd.c -o Even_odd"
./Even_odd
Enter an integer:
如果您不是真正从命令行运行,您可能需要fflush(stdout)
在printf
和 之间添加sscanf
。这是因为标准输出是行缓冲的,并且在 请求输入之前该行可能不会刷新(写入)到终端sscanf
。
不要忘记\n
在结果字符串的末尾,例如,printf("%d is even.\n", num)