【发布时间】:2014-03-03 22:42:42
【问题描述】:
./dataset
//我将数据读入文件并存入数组...
...
// 这里我需要向用户询问一个数字,但是程序总是跳过用户输入并继续...
字符答案; 答案 = getchar(); // 总是跳过 getchar()
【问题讨论】:
./dataset
//我将数据读入文件并存入数组...
...
// 这里我需要向用户询问一个数字,但是程序总是跳过用户输入并继续...
字符答案; 答案 = getchar(); // 总是跳过 getchar()
【问题讨论】:
不,这不是这样做的方法。不知道它是否会起作用,但是打开文件、阅读文件并保留标准输入以供您与用户交互不是更容易吗?
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 开头的变体,可以读取文件
手册页是你的朋友 :)
【讨论】:
如果你被允许使用并发,你可以在你的子进程中 fork() 一个新进程和 dup2() stdin 到一个新的文件描述符。您要确保不要在主进程上使用 dup2() 标准输入,否则您将失去从标准输入读取的能力。
如果这似乎是正确的方向细节,很高兴能详细说明
编辑:您能分享一下您是如何“停止”从传统标准输入读取的吗?我很困惑,因为通常从文件中读取不应阻止您从标准输入中读取。
Edit2 - 我认为 fvu 是对的,如果您查看链接到您的页面,则有一个答案是关于使用 dup2() 将标准输入文件描述符复制到临时文件描述符,替换标准输入的文件描述符用别的东西,然后用它的临时副本再次替换它。这听起来像你要找的东西
【讨论】: