C - scanf 函数在 GCC ubuntu 上不起作用



在将近 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()时常见的"问题"。操作系统缓冲stdinstdout以提高性能,并且仅在必要时刷新它们。您可以通过在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来运行程序。

相关内容

  • 没有找到相关文章

最新更新