【发布时间】:2015-04-17 02:10:57
【问题描述】:
我也阅读过有关此问题的先前问题。 fflush(stdin) 在这种情况下对我不起作用。 我希望我的程序从管道标准输入中读取并从中间的键盘输入继续。
int main()
{
int userin = 3;
read_input();
userin = print_menu();
userin = parse_input(userin);
return 0;
}
我想从文件中读取数据,该文件作为 pipied stding 传递给程序
程序int read_input(){
char line[200];
char word[MAX_STRING+1];
int line_number = 0;
while(fgets(line, sizeof(line), stdin) != NULL ){
//do something
printf("%s",line);
line_number++;
}
}
现在 read_input 必须完成从管道输入的读取。 'print_menu' 必须继续从键盘读取。
int print_menu()
{
int userinput;
char c;
char num[4];
while((c=getchar()) != '\n' && c != EOF && c != '\r');
printf("\n1. Choice 1 \n");
printf("2. Choice 2\n");
printf("3. Exit\n");
printf("Enter your choice (1-3): ");
/* scanf("%d", &userinput); */
/* fgets(num,80,stdin); */
scanf("%s", num);
userinput = atoi(num);
return userinput;
}
int parse_input(int userinput)
{
char num[4];
while( userinput > 3 || userinput < 1 ){
printf("Sorry, that is not a valid option\n");
printf("Enter your choice (1-3): ");
scanf("%s", num);
userinput = atoi(num);
/* scanf("%d", &userinput); */
/* while( (c = getchar()) == '\n'); */
}
return userinput;
}
我的输出是一个无限循环
Enter your choice (1-3): Sorry, that is not a valid option
当我删除 read_input 方法和管道标准输入程序工作正常。
我无法解决这个问题,有人有想法吗..
int read_input(){
char line[200];
char word[MAX_STRING+1];
int line_number = 0;
while(fgets(line, sizeof(line), stdin) != NULL ){
//do something
printf("%s",line);
line_number++;
}
}
现在 read_input 必须完成从管道输入的读取。 'print_menu' 必须继续从键盘读取。
int print_menu()
{
int userinput;
char c;
char num[4];
while((c=getchar()) != '\n' && c != EOF && c != '\r');
printf("\n1. Choice 1 \n");
printf("2. Choice 2\n");
printf("3. Exit\n");
printf("Enter your choice (1-3): ");
/* scanf("%d", &userinput); */
/* fgets(num,80,stdin); */
scanf("%s", num);
userinput = atoi(num);
return userinput;
}
int parse_input(int userinput)
{
char num[4];
while( userinput > 3 || userinput < 1 ){
printf("Sorry, that is not a valid option\n");
printf("Enter your choice (1-3): ");
scanf("%s", num);
userinput = atoi(num);
/* scanf("%d", &userinput); */
/* while( (c = getchar()) == '\n'); */
}
return userinput;
}
我的输出是一个无限循环
Enter your choice (1-3): Sorry, that is not a valid option
当我删除 read_input 方法和管道标准输入程序工作正常。 我无法解决这个问题,有人有想法吗..
【问题讨论】:
-
根据您的具体需要,您可以通过将管道输入和终端输入与 && 运算符相结合来解决此问题 - 请参阅 stackoverflow.com/questions/5843741/…
-
谢谢你 我从来不知道我不能同时做这两件事。你有什么好的参考资料可以让我了解更多关于管道和标准输入的信息,这有助于我理解这个问题。为什么会这样?