如果我最初使用'filename'作为stdin然后我需要回到传统的consol stdin,我是否需要更改stdin?

时间:2014-03-03 22:42:43

标签: input stdin

./数据集<文件名

//我将数据读入文件并将其存储到数组中......

...

//这里我需要向用户询问一个数字,但是,程序总是跳过用户输入并继续......

char回答; answer = getchar(); //总是跳过getchar()

2 个答案:

答案 0 :(得分:0)

不,那不是这样做的。不知道它是否会起作用,但是打开文件,读取它并保留stdin以便与用户交互不会更容易吗?

FILE *yourinputfile;

yourinputfile=fopen("whatevernamethefilehas","r");
// read with the appropriate routines, eg fscanf

fclose (yourinputfile);

char answer; answer = getchar(); // won't skip now

你会注意到C中的所有输入例程都有一个读取标准输入的“速记”变种,以及一个以f开头的读取文件的变种

  • scanf和fscanf
  • 获取和fgets

手册页是你的朋友:)

答案 1 :(得分:0)

如果允许使用并发,则可以fork()一个新进程和dup2()stdin到子进程中的新文件描述符。你想确保不要在你的主进程中使用dup2()你的stdin,否则你将失去从stdin读取的能力。

如果这看起来像方向的正确细节

,请高兴地详细说明

编辑:你能分享一下你如何“停止”从传统的stdin读书吗?我很困惑,因为通常从文件中读取不应该阻止你从stdin读取。

Edit2 - 我认为fvu是对的,如果你看一下你链接到你的页面,那么回答谈到使用dup2()将stdin文件描述符复制到临时文件描述符,替换stdin的文件描述符用其他东西,然后用它的临时副本再次替换它。这听起来像你在寻找