我知道我发布的程序非常基本,但我无法找到错误.我重新检查了一切,但尽管没有编译错误,输出也没有到来.
#include<stdio.h>
#include <stdlib.h>
int main()
{
int i;
while(1)
{
if((scanf("%d",&i))!=42)
{
printf("%d",i);
}
else
{
break;
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
感谢您的时间和考虑.
scanf不返回输入的值.它返回匹配的输入数量.所以42的检查是不正确的.如果分配了整数,它将返回1,如果i输入无效,则返回0.如果要在用户输入42时退出循环,则应明确进行测试if (i == 42).
正如simonc所提到的,你没有获得任何输出的原因是因为printf("%d",i);没有"\n"在数字后打印换行符,并且标准的out(stdout)流是行缓冲的.这意味着标准库将继续缓冲您的printfs,直到遇到换行符.此时缓冲区将刷新到控制台.
解决方案是添加换行符(这可能是你想要的):printf("%d\n",i); 或者,您可以调用fflush(stdout)告诉std库立即将缓冲的内容刷新到控制台.或者,写入stderr将立即输出,因为它是无缓冲的.
这应该证明:
#include <stdio.h>
int main()
{
int i;
while(1) {
fprintf(stderr, "Enter a number (or 42 to quit): ");
if((scanf("%d",&i)) != 1) {
fprintf(stderr, "Invalid input.\n");
continue;
}
if (i==42)
break;
printf("Number provided: %d\n", i);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
$ ./a.exe
Enter a number (or 42 to quit): 17
Number provided: 17
Enter a number (or 42 to quit): 42
$
Run Code Online (Sandbox Code Playgroud)