【问题标题】:C - change stdin and wait for user inputC - 更改标准输入并等待用户输入
【发布时间】:2017-01-07 02:51:31
【问题描述】:

我有以下代码:

#include <stdio.h>

int main()
{
   char c = 0;
   fclose(stdin);
   stdin = fopen("newin", "r");
   if(stdin != NULLL)
   {
      scanf("%c", &c);
      printf("%d", c);
   }
   else
       printf("Error");
}

我希望我的程序等待标准输入文件的更改。我将它创建为空白,但它返回 0。

如果一个 put 像一个 'a' 字符在里面,它会打印 97。

如何让 scanf 等待文件中的更改,就像它在等待我在终端窗口中写入一样?

【问题讨论】:

  • 你为什么要关闭标准输入?你可能想看看这个答案:stackoverflow.com/a/5925575/1212725。您可能还想检查 fclose 的返回码。
  • 你想在你的文件中写入,然后你的程序读取你写的内容?有点像你在终端做的?
  • @GabrielPellegrino 是的,这是我的想法

标签: c


【解决方案1】:

如何让 scanf 等待文件中的更改,就像它在等待我在终端窗口中写入一样?

你不能。

来自stdin 的输入和来自磁盘的文件的处理方式不同。当您从文件中读取时,该文件必须在您打开文件以读取文件之前按顺序排列。

【讨论】:

  • 有什么方法可以模拟吗?就像我想让一个进程运行,另一个给它输入。
  • 当然。您可以分叉一个子进程并在它们之间使用管道。见stackoverflow.com/questions/4812891/fork-and-pipes-in-c
  • 如果你把你的程序放在一个循环中读取文件并让它在找到信号时采取行动,你就可以在你的存档中写入。
  • 我不明白为什么使用管道不是一个通用的解决方案。
  • 因为你必须创建一个父进程和一个子进程,我只想创建一个进程,然后通过另一个进程发送和接收来自它的信息,可以运行或不运行......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-21
  • 1970-01-01
  • 1970-01-01
  • 2017-02-15
  • 2017-07-07
相关资源
最近更新 更多