2 / 2 / 0
Регистрация: 08.09.2017
Сообщений: 9
|
||||||
1 | ||||||
Не корректно работает компилятор gcc08.09.2017, 09:45. Показов 4232. Ответов 21
изучаю язык си на линуксе. компилятор gcc. пишу простые программки. при вызове scanf ввожу значения и жму энтер, но он никак не реагирует, затем ввожу любое значение и он начинает работать с первым введенным значением. при использовании в программе нескольких scanf срабатывает только первый, остальные пропускаются и код выполняется дальше, как будто их и нет вовсе.
archlinux, в любом эмуляторе терминала работает одинаково, zsh, gcc -v 7.1.1 программа для примера
1
|
08.09.2017, 09:45 | |
Ответы с готовыми решениями:
21
Компилятор (gcc 4.6) не распознает параметер-std=gnu11 gcc компилятор gcc/c++ компилятор Компилятор gcc 4.8.1 не поддереживает C++11 |
08.09.2017, 10:08 | 2 |
В конец последнего printf'а добавь \n
И вбей себе в голову раз и на всегда одну мысль. Если тебе кажется, что неправильно работает компилятор, значит с вероятностью 99.9999999% ошибка в твоей программе
7
|
41 / 41 / 15
Регистрация: 29.12.2016
Сообщений: 291
|
||||||
08.09.2017, 14:02 | 3 | |||||
Присоединяюсь к последнему посту от EVG Чтобы корректно работали несколько scanf, после каждого добавляется getchar(), для очистки. Так как передается два значения, символ который записывается в переменную и перевод строки '\n' при нажатии кнопки "ENTER", вот как раз, чтобы такого не происходило и служит getcha(). Например:
0
|
Вездепух
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,068
|
|
08.09.2017, 21:08 | 4 |
В приведенном вам коде есть только один
scanf , а вы нам рассказываете про несколько scanf . Приводите реальный пример кода. В приведенном вами примере описываемых проблем нет и быть не может. (Кроме, развые что, рекомендации завершать printf переводом строки.)И уж выдумки про "некорректно работающий компилятор gcc" тут совсем неуместны. Добавлено через 3 минуты В этом нет никакого смысла. Никаких проблем от символа \n в буфере у scanf не будет и удалять его оттуда нет никакой необходимости. Большинство форматных спецификаторов scanf просто игнорирует ведущие пробельные символы.Проблемы скорее возникнуть от смешения форматированного и неформатированного ввода, типа вашего getchar() . Не надо делать такого смешения без пущей необходимости.
3
|
41 / 41 / 15
Регистрация: 29.12.2016
Сообщений: 291
|
||||||
09.09.2017, 07:19 | 5 | |||||
Вот реальный код, уберите отсюда getchar()ы и вы получите, что попало на выходе, Игнорирование последующих scanf, и всякую ерунду на выводе.
0
|
Вездепух
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,068
|
||||||
09.09.2017, 07:33 | 6 | |||||
Совершенно верно. Именно потому, что в данном коде используется эксклюзивный и довольно исключительный по своему поведению спецификатор формата
%c , работа с которым требует определенных навыков. У автора вопрос пока никакого %c в коде видно не было.Но, что касается вашего кода: 1. Спецификатор формата %c используется только в первых двух scanf . И этот getchar() условно "нужен" только между ними - один единственный. Все остальные getchar() можно сразу смело выкидывать из этого кода - они тут нинафиг не нужны и никакого "что попало на выходе" после их удаления мы не получим, вопреки вашим предсказаниям.2. Правильно это делается не через какой-то непонятно откуда взявшийся getchar() , а банальной просьбой к scanf пропустить ведущие пробельные символы перед %c . Для этого перед %c надо просто вставить пробел
getchar() в этом коде стали не нужны вообще.
3
|
41 / 41 / 15
Регистрация: 29.12.2016
Сообщений: 291
|
|
09.09.2017, 08:25 | 7 |
TheCalligrapher, Все может быть, мне как объяснили, я так и делаю, хотя тут на форуме, еще один человек, говорит тоже самое, только он еще и в цикл это все обернул. Scanf не считывает символ
0
|
Evg
|
09.09.2017, 09:38
#8
|
Не по теме: Вероятно, много народу, говорящих одно и то же, является следствием глобальных заблуждений со стороны преподавателей. Люди ведь обучаются по одним и тем же книгам и мало кто читает точные спецификации в стандарте. У кого-то когда-то getchar помог спасти ситуацию, он рассказал об этом всем, а все с радостью подхватили, не потрудившись разобраться, как же нужно было делать правильно
0
|
Модератор
|
|
09.09.2017, 11:51 | 10 |
0
|
Фрилансер
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
|
|
09.09.2017, 13:32 | 11 |
+1 за смелось назвать тему о некорректности компилятора в разделе начинающих))
+100
0
|
2 / 2 / 0
Регистрация: 08.09.2017
Сообщений: 9
|
||||||
11.09.2017, 13:18 [ТС] | 12 | |||||
использую вот такой вот код
enter num1 5 6 enter num2 7 8 you entered 5 and 7 подскажите еще можно ли упоминать людей в сообщении? ну то есть могу ли в этом сообщении несколько людей упомянуть?
0
|
Фрилансер
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
|
|
11.09.2017, 13:50 | 13 |
просто кликайте на ники и все))
Добавлено через 55 секунд вы же _getchar() -ом еще символ считываете))
0
|
Модератор
|
||||||
11.09.2017, 15:56 | 15 | |||||
Возможно, вас устроит такой вариант:
0
|
2 / 2 / 0
Регистрация: 08.09.2017
Сообщений: 9
|
|
12.09.2017, 05:27 [ТС] | 16 |
LightProger, спасибо.
Добавлено через 1 минуту FateOri, как с getchar так и без него все работает одинаково
0
|
Фрилансер
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
|
|
13.09.2017, 11:25 | 17 |
0
|
Вездепух
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,068
|
|
13.09.2017, 20:08 | 18 |
Это не показательная проверка, т.к. вход берется "из файла". Не видно, в каких местах программа делает "паузы".
А у реального пользователя, вводящего данные с клавиатуры, ваша программа будет вести себя "странно" и будет "необъяснимо затыкаться" при вводе именно из-за этих лишних \n в строках формата scanf .
1
|
2 / 2 / 0
Регистрация: 08.09.2017
Сообщений: 9
|
|
14.09.2017, 06:29 [ТС] | 19 |
FateOri, вот кстати при использовании \n в scanf работает не так как ожидается. запрашивает лишнее раз ввод. а без него все норм, как с getchar так и без него.
0
|
Фрилансер
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
|
|
14.09.2017, 19:14 | 20 |
и точно
спасибо) все равно вы неправы)) вот более правильный тест http://rextester.com/PYKE96826 пробуйте сами и поймете что делает getchar))
0
|
14.09.2017, 19:14 | |
14.09.2017, 19:14 | |
Помогаю со студенческими работами здесь
20
компилятор GCC парит мозг Компилятор gcc не может найти stdio.h Как узнать есть ли компилятор gcc? Как компилятор gcc установить в Ubuntu? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |