从文本文件中读取输入

时间:2013-03-20 04:08:13

标签: c scanf

我编写了一个简单的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:

提示是否可以各自出现?

感谢您的帮助!

2 个答案:

答案 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");
...