我的第一个scanf()不是在等待输入,但仍然等待并接受输入

时间:2017-10-06 18:38:10

标签: c

我遇到了一些分配代码的问题,以熟悉进程和fork()系统调用。出于某种原因,当我在初始if语句中调用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

前三个和第四个是用户输入,所以看起来程序在看到第一个扫描后直接进入第二个scanf?流程ID总是正确的。

1 个答案:

答案 0 :(得分:0)

在致电scanf之前,您正在分配流程。这为您提供了2个流程。然后两个进程都调用scanf,一个读取“x”,另一个读取“y”。他们都在等待用户输入,但因为你有两个进程同时进行,所以你得到两个消息。