【发布时间】:2014-07-21 14:54:32
【问题描述】:
我在 Mac OSX 上编写了一个小型 C 程序,它执行以下步骤:
- 从标准输入读取一些输入并将输入存储到内存中。
- 运行一些计算并将输出打印到 stdio
在第 1 步和第 2 步之间,我想提示用户并等待某种键盘输入来表示“继续执行第 2 步”。问题是使用命令调用程序时stdin已被重定向:
$ ./simple < input.in
我想在读取文件后将标准输入重定向到键盘,但不知道该怎么做。我尝试过使用
fclose(stdin);
freopen("newin", "r", stdin);
但此后标准输入无法从键盘读取。任何有关如何执行此操作的建议将不胜感激。
还有几点:
- 真正的程序比这更复杂,但简单仍然可以说明我的问题。
- 这样做的原因是我想在执行过程中暂停我的程序,以便我有足够的时间将“简单”进程加载到名为 Instruments 的 OSX 应用程序中以进行性能分析。
- 如果有帮助,下面提供了更多示例代码。
int main(void) {
// STEP 1
int array[ARRLEN];
readinput(array, ARRLEN);
// WAIT FOR KEYBOARD INPUT TO PROCEDE
// redefine stdin to keyboard
fclose(stdin);
freopen("newin", "r", stdin);
char c[5];
char cmp[5] = ".";
puts ("Enter text. Include a dot ('.') in a sentence to exit:");
while (1) {
fgets(c, sizeof(c), stdin);
printf("c = %s\n", c);
// if (strcmp(c, cmp))
// break;
sleep(1);
}
// STEP 2
// do something here
return 0;
}
【问题讨论】:
-
如果你需要从文件中读取,为什么你重定向标准输入,当你可以用
fopen()打开文件并从中读取? -
为了程序,我可以这样做,但它是用于 Uni 分配,他们运行/测试程序的方法将使用标准输入管道
-
如果他们运行某种自动测试,你最好不要尝试阅读键盘。不会有人在上面打字。如果您的作业需要阅读
stdin,请阅读stdin。
标签: c stdin instruments