Вы используете вашу программу неправильно.
"%c %f %d"
означает: scan 1 character, then a space, then a float, then a space, then an int
. Там нет Enter. Я запустил вашу программу, и она работает нормально - , пока я не нажимаю Enter :
Enter names,prices & no. of pages of 3 books
a 123.33 555b 124.44 666c125.555 777
And this is what you entered
a 123.330002 555
b 124.440002 666
c 125.555000 777
Вы можете увидеть, как scanf обнаруживает изменение между последним% d и первым% c просто выяснив: «хм,« b »не подходит как другой ди git из« 555 », так что давайте закончим sh %d
». а затем запускается следующая строка. Если вы нажмете Enter, то это новая строка (Enter), которая перейдет к названию следующей книги. И когда вы нажимаете «b», он не подходит ни к% f, ни к% d, поэтому они устанавливаются в ноль, и тогда ваш «b» в конце концов становится соответствующим названию третьей книги. Итак, у вас есть 3 книги: a, Enter и b.
Если вы хотите запросить Enter, добавьте «ожидайте Enter»: scanf("%c %f %d\n"
Теперь ваша программа работает так:
Enter names,prices & no. of pages of 3 books
a 123.33 555
b 124.44 666
c 125.55 777
And this is what you entered
a 123.330002 555
b 124.440002 666
c 125.550003 9
scanf
просто делает точно , как вы говорите.
К сожалению, оба связанных ответа не очень хороши. Проблема не в начале второй строки, а в первой.