我编写了一个简单的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:
提示是否可以各自出现?
感谢您的帮助!
答案 0 :(得分:2)
当程序以交互方式运行时,用户输入将在屏幕上回显。将标准输入重定向到程序时,不会回显该输入。因此,为了在后一种情况下获得换行而不是前一种情况,你必须检测到这种情况,并根据你从哪里获得输入做一些不同的事情。
值得庆幸的是,只要你在POSIX系统上,这并不是很困难。添加:
#include <unistd.h>
然后在每个scanf
之后添加:
if (!isatty(STDIN_FILENO))
printf("\n");
检查标准输入是否连接到终端。如果不是(例如,如果它是从文件重定向的输入),则会打印换行符。
答案 1 :(得分:0)
您可以在scanf
之后打印换行符,以获得更漂亮的打印输出。副作用是您在输入时会看到额外的空白行。
printf("Please enter number one: ");
scanf("%i", &numberOne);
printf("\n");
printf("Please enter number two: ");
scanf("%i", &numberTwo);
printf("\n");
...