【问题标题】:Reading input from text file从文本文件中读取输入
【发布时间】:2013-03-20 04:08:12
【问题描述】:

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

提示是否可以单独出现在一行中?

感谢您的帮助!

【问题讨论】:

    标签: c scanf


    【解决方案1】:

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

    谢天谢地,只要您使用的是 POSIX 系统,这并不难。添加:

    #include <unistd.h>
    

    然后在每个scanf 之后添加:

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

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

    【讨论】:

    • 非常感谢,太完美了 :) 我也做了修改,现在是printf("%i\n", numberOne),这样它也会将文件中的输入回显到屏幕上。
    【解决方案2】:

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

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

    【讨论】:

    • 谢谢。我之前已经尝试过您的建议,并且在手动输入时得到了额外的空白行 - 我希望尽可能避免这种情况发生......
    猜你喜欢
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多