【问题标题】:fgets in infinite loop terminatingfgets 在无限循环终止
【发布时间】:2019-10-02 23:53:10
【问题描述】:

我正在尝试在无限循环中使用 fget,因为我需要来自用户的特定输入。我想连续打印一些东西,直到我收到用户的任何输入。但是 fgets 似乎使程序等待输入。

我尝试过使用gets等其他输入法。

while(1){
        char input[100];
        fgets(input, sizeof(input),stdin);
        printf("I want this statement to continuously print.");
}

该语句仅在我输入文本时打印。但是,我希望它无论输入如何都能连续打印语句。

【问题讨论】:

  • 为什么不直接删除fgets?如果这个问题的答案是因为你需要它来做某事,那么编辑你的问题以显示“某事”。
  • 是的,抱歉现在编辑我的问题。

标签: c fgets


【解决方案1】:

C 标准库中的所有 I/O 都是阻塞 I/O。这意味着如果您读取或写入文件(或标准输入等),读取或写入函数将不会返回,直到读取或写入发生(或遇到错误)。

如果您希望在 I/O 操作进行时执行代码,您需要 (1) 使用多个线程,或者 (2) 使用低级非阻塞 I/O(例如,Posix read /用 O_NONBLOCK 写入文件)。使用标准输入,这也可能涉及到终端设置的一些低级混乱。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-30
    • 2013-03-17
    • 2017-01-18
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多