Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从文本文件读取输入_C_Scanf - Fatal编程技术网

C 从文本文件读取输入

C 从文本文件读取输入,c,scanf,C,Scanf,我编写了一个简单的C程序,它使用类似以下代码从用户处获取输入: printf("Please enter number one: "); scanf("%i", &numberOne); printf("Please enter number two: "); scanf("%i", &numberTwo); ... 当程序运行时,这一切都可以正常工作-提示用户输入,每个输入提示出现在单独的一行上(可能是因为用户点击回车键表示他们已在前一行完成输入)。例如: Please en

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

printf("Please enter number one: ");
scanf("%i", &numberOne);
printf("Please enter number two: ");
scanf("%i", &numberTwo);
...
当程序运行时,这一切都可以正常工作-提示用户输入,每个输入提示出现在单独的一行上(可能是因为用户点击回车键表示他们已在前一行完成输入)。例如:

Please enter number one:
Please enter number two:
但是,当我使用
/myProgram
将文本文件重定向到程序中作为输入(用于测试)时,所有输入提示都显示在一行上,我猜测是因为没有按下返回键,因为所有输入都来自文本文件:

Please enter number one: Please enter number two:
提示是否可能出现在各自的行中


谢谢你的帮助

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

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

当程序以交互方式运行时,用户输入将在屏幕上回响。当您将标准输入重定向到程序中时,不会回显该输入。因此,为了在后一种情况而不是前一种情况下获取换行符,您必须检测该情况,并根据您从何处获取输入来执行不同的操作

谢天谢地,如果您使用的是POSIX系统,那么这并不难。加:

#include <unistd.h>

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

谢谢。我之前已经尝试过你的建议,并且在手动输入时得到了额外的空行-我希望尽可能避免出现这种情况…非常感谢,这很完美:)我也做了修改,现在它是
printf(“%I\n”,numberOne)
,这样它也会将文件中的输入回显到屏幕上。
if (!isatty(STDIN_FILENO))
    printf("\n");