在将近 10 年的间隔之后,我开始编写 C 代码。我正在教我妹妹,不幸的是,在 Ubuntu 上一个简单的兴趣程序的一个非常基本的 scanf(( 函数上卡住了。
我的程序没有给出任何编译错误,但它没有在屏幕上显示任何内容
这是代码:
#include <stdio.h>
int main()
{
int p,n;
float r,si;
printf("enter values of p,n,r");
scanf("%d %d %f",&p,&n,&r);
si = p*n*r/100;
printf("%f" , si);
return 0;
}
这是尝试printf()
和scanf()
时常见的"问题"。操作系统缓冲stdin
和stdout
以提高性能,并且仅在必要时刷新它们。您可以通过在printf()
之后立即调用fflush(stdout);
来显式刷新标准输出。
在 scanf(( 问题之前,请参阅 C/C++ printf((。
您的代码最终看起来像
#include <stdio.h>
int main()
{
int p,n;
float r,si;
printf("enter values of p,n,rn");
fflush(stdout); // Force stdout to be flushed
scanf("%d %d %f",&p,&n,&r);
si = p*n*r/100;
printf("%f" , si);
return 0;
}
我认为您只是没有正确查看控制台。输出 "si" 与第一个 printf 打印在同一行上,因为您没有在其末尾插入换行符。
当你说
屏幕上不显示任何内容
(强调后加(,我的意思是,当您运行它时,它不会显示您正在打印的数据输入提示。 这是因为标准输出在连接到终端时默认是行缓冲的——它会在打印之前将输出缓冲在内存中,直到缓冲区被填满,或者(因为行缓冲(输出换行符,或者流关闭(包括程序正常终止时(。
因此,显示提示的一种方法是向其追加换行符:
printf("enter values of p,n,rn");
另一种方法是使用自动附加换行符的输出函数:
puts("enter values of p,n,r");
如果要确保即使没有发送换行符也能显示输出,则可以改为刷新流(在本例中为标准输出(:
printf("enter values of p,n,r: ");
fflush(stdout);
你的代码在我的 Ubuntu 系统中非常适合我。这可能是因为您使用的 IDE 错误。
尝试以这种方式Ubuntu
运行代码:-
- 将文件另存为桌面上的
program.c
。 - 打开终端并键入
cd Desktop
(导航到桌面(。 - 通过键入
gcc -o program program.c
来编译代码。 - 通过键入
./program
来运行程序。