Подумайте, что произойдет, когда вы сделаете свой первый вклад. Вы вводите 3, а затем нажимаете Enter.
Теперь в буфере стандартного ввода есть два элемента, ожидающих использования: 3
и \n
(то есть Enter).
Вы вводите тело цикла в первый раз, 3 расходуется. Теперь следующий в строке ожидает \n
...
Когда вы снова вводите тело цикла (второй раз), следующий символ, который будет считан стандартным входным буфером, будет \n
, и эточто радостно возвращается вам второй getchar()
.
Вот быстрое исправление:
do {
printf ("How many processes do you want? (1, 2 or 4) \n");
// Eat trailing newline character, if any
do {
num_processes = getchar(); // read a character
} while(num_processes == '\n'); // if it was the newline character, repeat
// until `num_processes` is not the newline character
// Continue with your logic..
num_processes -= '0';
Вывод:
How many processes do you want? (1, 2 or 4)
3
Invalid Input, please try again.
How many processes do you want? (1, 2 or 4)
2
1 Parent and 1 child processes
----------------------------------
PS: Как прокомментировал @Barmar,если вы хотите прочитать строки, используйте fgets()
. Подробнее здесь: Как использовать fgets () для управления выполнением цикла while через пользовательский ввод в c?