C,如何使程序在使用fork()时不跳过scanf()

时间:2019-06-02 03:32:04

标签: c scanf fork

程序需要输入十个输入,这也可以同时发生,而其他进程则使用fork()进行。相反,它只是“输入输入:

输入输入:输入输入:输入输入:输入输入:输入输入:输入输入:输入输入:...”


int main(int argc, char * argv[]) 
{ 

int n1 = fork();
int n2 = fork();
    if (n1 == 0 && n2 > 0 ){
       getMarks();
                            }
    else if (n1 > 0 && n2 == 0) { 
        printf("child2")
                                }

    else if (n1 > 0 && n2 > 0){
     printf("Parent");
                               }
    else {printf("Child3");
         }



}

void getMarks(){
    printf("Enter ten marks: \n");
    int i = 0;
    int highestMark = 0;
    for (i; i < 10; i++){
        int num = 0;
        printf("Enter Mark: ");
        scanf("%d", &num);
        if (num > highestMark) { 
            highestMark = num; }

    }   
    printf("Highest Mark is : %d", highestMark);

}

预期结果将是其他孩子和父母将其打印到控制台中,同时也能够将输入信息输入getMarks()

1 个答案:

答案 0 :(得分:0)

然后不要那样做。

您的第一个输入字符已发送到外壳。您输入的第二个字符已发送到程序。 rosinstall_generator sensor_msgs --rosdistro indigo --deps -wet-only --tar > indigo-sensor_msgs-wet.rosinstall wstool init src indigo-sensor_msgs-wet.rosinstall 无法很好地从输入错误中恢复。

为避免此问题,请不要从父代不再活动的子进程中读取标准输入。安排您的代码,这样就永远不会发生。