gpt4 book ai didi

c - 我的第一个 scanf() 不等待输入,但仍然等待并稍后接受输入

转载 作者:行者123 更新时间:2023-11-30 19:32:54 24 4
gpt4 key购买 nike

我在分配一些代码时遇到问题,以熟悉流程和 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

前 3 和 4 是用户输入,所以看起来程序在看到第一个之后就直接进入第二个 scanf 了?进程 ID 始终正确。

最佳答案

您在调用 scanf 之前 fork 了该进程。这为您提供了 2 个进程。然后,两个进程都调用 scanf,一个读取“x”,另一个读取“y”。它们都在等待用户输入,但由于您有两个进程同时执行此操作,因此您会收到两条消息。

关于c - 我的第一个 scanf() 不等待输入,但仍然等待并稍后接受输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46611982/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com