0

所以这是我到目前为止的代码:

printf("Input:\t   Radius:\tSurface Area:\t Circumference:\t    Volume:\n\n");
scanf("%lg", &diameter);
printf("%lg%lg\t\t%-12lg\t\t%-12lg\t\t%-12lg\n\n", diameter, calcRadius(diameter), calcSurfaceArea(diameter), calcCircumference(diameter), calcVolume(diameter));

我的输出如下所示:

Input:     Radius:      Surface Area:    Circumference:     Volume:

99
9949.5          30775.1                 310.86                  507790

Press any key to continue . . .

我怎样才能使输出看起来像这样:

Input:     Radius:      Surface Area:    Circumference:     Volume:

  99      9949.5          30775.1       310.86             507790

Press any key to continue . . .

简而言之,我意识到在使用 scanf() 并且用户按下回车后, printf() 会自动打印到新行。我怎样才能得到它,以便它会在用户输入数字的同一行上打印,即使用户按下回车键也是如此。

我应该使用不同的函数来获取输入,还是完全不同的方法?

4

3 回答 3

1

您可以使用 termios 库将 STDIN 设置为非规范和非回显模式,并自己开始回显字符,以便不打印换行符。此外,如果你想走这条路,你必须使用你自己的 scanf 实现:

http://www.gnu.org/software/libc/manual/html_node/Noncanon-Example.html

于 2013-02-08T18:03:07.557 回答
0

你需要查看curses库来做那种事情。

于 2013-02-08T18:04:11.490 回答
0

你知道 scanf 会做什么。对于您的程序,您可以在 printf() 中删除打印直径

printf("Input:\t   Radius:\tSurface Area:\t Circumference:\t    Volume:\n\n");
scanf("%lg", &diameter);
printf("\t%lg\t\t%-12lg\t\t%-12lg\t\t%-12lg\n\n", calcRadius(diameter), 
calcSurfaceArea(diameter), calcCircumference(diameter), calcVolume(diameter));
于 2013-02-08T18:20:00.603 回答