Автор Тема: Нелогичная работа программы на С  (Прочитано 3127 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Can

  • *
  • Сообщений: 12
  • Karma: +0/-0
Нелогичная работа программы на С
« : 12 Декабря 2009, 09:29 »
Программа на С. Непонятное нарушение  ожидаемой  последовательности работы программы. Самая суть, с пропуском  не  влияющих на данный результат операторов :

scanf ( "%c", &ch) ;
while (ch != 'q' )  // q - для выхода из цикла
{   
   -----------------------  // пропущенные операторы
   -----------------------  
   printf ( "Введите вес в фунтах : ") ;
   scanf ( "%f ", &weight ) ;
   
   printf ( "Введите следующий товар : ") ;
   scanf ( "%c ", &ch) ;

}

printf ( "Стоимость фунта товара : % .2f  n", rate ) ;
-------------------------------------------
------------------------------------------
Компиляция проходит нормально. Но результат следующий по выполнении цикла while :
 
Введите вес в фунтах: 5  // ввожу число
Введите следующий товар : Введите вес в фунтах : q  // здесь, явно, ожидание ввода символа оператором scanf ("%c",&ch)
                                                                                   // ввожу q - для выхода из цикла
Получаю:
   Введите следующий товар : Стоимость фунта товара :

То есть, внутри цикла, по достижении последнего оператора printf (), ввода scanf () программа не ожидает ,как того требует алгоритм , а сразу выводит
предыдущий оператор printf () !? ; при вводе q , по выходе из цикла, получаю последний в цикле оператор printf () ! , - хотя по условию должен быть выход из цикла. То есть, первый проход цикла - нормальный , сбой при итерации. В чем может быть дело ? Все подобные программы работали нормально......