我的第一个scanf()不在等待输入,但仍然在等待并接受输入以后
问题描述:
我对某个赋值代码有问题以熟悉进程和fork()系统调用。由于某些原因,当我在初始if语句中调用scanf()时,它不会立即等待输入,首先程序继续下一个scanf并等待输入。我知道有很多类似的任务,但我找不到确切的问题。我的第一个scanf()不在等待输入,但仍然在等待并接受输入以后
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main(){
pid_t pid;
int pipeid[2];
pid = fork();
if(pid >0){
int x;
printf("reading x from user: ");
scanf("%d", &x);
printf("display %d",x);
wait(0);
}
else{
int y;
printf("reading y from user: ");
scanf(" %d", &y);
printf("%d",y);
printf("parent proccess %d created child proccess %d\n", getppid(),getpid());
}
}
输出对这一计划看起来像这样
reading x from user: reading y from user 3
4
4parentproccess (Ppid) created child process (pid)
display 3
第3和4是用户输入的,所以它看起来像程序直行到第二scanf函数它看到后的第一个?进程ID始终是正确的。
答
您在致电scanf
之前分叉处理。这给你2个过程。这两个过程然后调用scanf
,一个读数为“x”,另一个读数为“y”。他们都在等待用户输入,但是因为你有两个进程同时进行,你会得到两个消息。
在我看来,有两个不同的进程调用scanf。为什么要等另一个? –
它工作正常。这两个过程没有问题。对于打印顺序(如果您想要查看第一个printf&scanf并移至父级中的下一个),您需要等待孩子完成后才能开始处理父级。 –