scanf函数在GCC ubuntu上不起作用

时间:2018-07-06 16:51:35

标签: c ubuntu gcc scanf

经过将近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;
 }

4 个答案:

答案 0 :(得分:2)

当尝试printf()scanf()一个又一个时,这是一个常见的“问题”。操作系统缓冲区stdinstdout为了提高性能,仅在必要时刷新它们。您可以在fflush(stdout);之后立即调用printf()来显式刷新stdout。

请参见C/C++ printf() before scanf() issue

您的代码最终看起来像

#include <stdio.h>
int main()
{
    int p,n;
    float r,si;
    printf("enter values of p,n,r\n");
    fflush(stdout); // Force stdout to be flushed
    scanf("%d %d %f",&p,&n,&r);
    si = p*n*r/100;
    printf("%f" , si);
    return 0;
 }

答案 1 :(得分:0)

我认为您只是没有正确查看控制台。输出“ si”将与您的第一个printf在同一行上打印,因为您没有在其末尾插入换行符。

答案 2 :(得分:0)

您的代码在我的Ubuntu系统中非常适合我,这可能是由于您使用的IDE错误所致。

尝试通过以下方式在->fetchColumn(0)中运行代码:-

  • 在桌面上将文件另存为ae = AE(config.get('move', 'aet'), port=pynetport, scu_sop_class=QueryRetrieveSOPClassList) assocstore = ae.associate(configworkstationaddress, int(configworkstationport)) *stuff* dsstore = dcmread(dcmfilenames[0]) status = assocstore.send_c_store(dsstore) print(status) assocstore.release()
  • 打开终端并输入pip uninstall pyzmq pip install pyzmq (导航到桌面)
  • 通过键入Ubuntu来编译代码。
  • 通过键入program.c运行程序。

答案 3 :(得分:0)

当你说

  

在屏幕上不显示任何内容

(添加了重点),我的意思是说,当您运行它时,它不会显示您正在打印的数据输入提示。这是因为标准输出在连接到终端时默认情况下是行缓冲的-它会在打印输出之前将其缓冲在内存中,直到缓冲区被填满或(因为 line 已缓冲)输出换行符,或关闭流(包括程序正常终止时的时间)。

因此,导致显示提示的一种方法是在其后添加换行符:

printf("enter values of p,n,r\n");

另一种方法是使用自动添加换行符的输出函数:

puts("enter values of p,n,r");

如果您要确保即使没有发送换行符也要显示输出,则可以刷新流(在这种情况下为标准输出):

printf("enter values of p,n,r: ");
fflush(stdout);