1

我编写了一个简单的 C 程序,它使用类似于以下的代码从用户那里获取输入:

printf("Please enter number one: ");
scanf("%i", &numberOne);
printf("Please enter number two: ");
scanf("%i", &numberTwo);
...

当程序运行时,这一切都工作正常 - 提示用户输入,每个输入提示出现在单独的行上(可能是因为用户按下 Return 键以表示他们已在前一行完成输入)。例如:

Please enter number one:
Please enter number two:

但是,当我使用所有输入提示将文本文件作为输入(用于测试)重定向到程序中./myProgram < inputText.txt时,我猜是因为所有输入都来自文本文件,所以没有按下 Return 键:

Please enter number one: Please enter number two:

提示是否有可能出现在各自的行上?

谢谢你的帮助!

4

2 回答 2

2

当程序以交互方式运行时,用户输入会在屏幕上回显。当您将标准输入重定向到程序中时,该输入不会被回显。因此,为了在后一种情况下而不是前一种情况下获得换行符,您必须检测这种情况并根据您从哪里获得输入做一些不同的事情。

值得庆幸的是,只要您使用的是 POSIX 系统,这并不是很困难。添加:

#include <unistd.h>

然后在每次scanf添加之后:

if (!isatty(STDIN_FILENO))
    printf("\n");

这将检查标准输入是否连接到终端。如果不是(例如,如果它是从文件重定向输入),它会打印一个换行符。

于 2013-03-20T06:13:18.800 回答
0

您可以在之后打印换行符scanf以获得更漂亮的打印输出。副作用是您在输入时会看到额外的空白行。

printf("Please enter number one: ");
scanf("%i", &numberOne);
printf("\n");
printf("Please enter number two: ");
scanf("%i", &numberTwo);
printf("\n");
...
于 2013-03-20T04:15:30.230 回答