C, как заставить программу не пропускать scanf () при использовании fork () - PullRequest
0 голосов
/ 02 июня 2019

Программа должна принять десять входных данных, это тоже происходит одновременно, в то время как другие процессы происходят, используя 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 голосов
/ 02 июня 2019

Тьфу, не делай этого тогда.

Ваш первый символ записи отправлен в оболочку.Ваш второй персонаж был отправлен в программу.scanf не может очень хорошо восстановиться после ошибок ввода.

Чтобы избежать этой проблемы, не читайте стандартный ввод от дочерних процессов, чей родитель больше не жив.Расположите свой код так, чтобы этого никогда не происходило.

...