Другие языки программирования и технологии

Программа на Си

Здравствуйте. Мне нужно было создать программу на Си, которая переводи из цельсия в фаренгейты. Программа простая, но нужно было сделать её так, что бы она не работала при вводе букв/-ы и выводила сообщение с просьбой ввести корректное значение (цифру). Нашёл я такую программу, но не могу разобраться с некоторыми строками, а мне придется это объяснять. Может кто-нибудь объяснить те строки, которые я выделил (что это за команды, для чего написан тот или иной символ и тп)? Чем подробнее, тем лучше. Заранее спасибо
№ 11
Объявление функции ввода, без ее определения. Тут такая фишка, не объяви мы ее сейчас - не смогли бы вызвать ее на 16 строке, так как ее бы просто не существовало. Это довольно распространенная практика: определяем все функции до main, чтобы просто видеть названия с аргументами и примерно понимать что они должны делать, а реализуем их, то есть прописываем код в их тело, уже под main, если кому интересна их реализация - спустится и глянет.

№ 12
А что не понятно то? Основная функция. Замени float на int и всё. Если интересует то, что в скобках - гугли "аргументы командной строки", но тебе это вряд ли в ближайшее время понадобится.

№ 16
Переменной celsia присваиваем значение, которое вернет функция vvod_int()

№ 21-29
Ну а это собственно реализация самой функции ввода. Причем довольно таки элегантная. Новичок бы считывал строку, пробегался по ней циклом, проверяя каждый символ, потом преобразовывал бы в float...тут всё сделано хитрее. Попытаюсь объяснить попроще.

Для начала, тебе просто стоит знать, что в данном случае, конкретно в этой программе, при неудачном вводе (а точнее при попытке записать не числовое значение в переменную input) функция scanf вернет 0. Что она возвращает в остальных случаях - не важно, если интересно - почитай ее подробное описание.

Из этого факта мы делаем вывод, что 24 строку можно прочитать как
"до тех пор пока (ввод не удался)"

До тех пор пока ввод не удался, мы, каждую итерацию цикла:
26: выводим сообщение об ошибке
27: чистим поток ввода, убирая из него "не число" (если интересно как именно работает эта строка - загугли ее)
28: перескакиваем в начало цикла

Если же ввод удался, то мы пропускаем всё тело while и vvod_int() возвращает число, которое записывается в переменную на строке 16.

Фух, вроде всё.
СХ
Серега Хлопотов
10 115
Лучший ответ
Первое выделение - заголовки используемых функций. Кстати, для main он нестандартный, большинство компиляторов не пропустит.
Второе - присвоение переменной celsia значения, введенного через функцию vvod_int.
Третье - код функции vvod_int.
А вообще тут надо просто объяснять самые начала языка Си - объявления, присваивания, функции и т. п. Возьми какое-нибудь пособие и читай.
Robert Santrosyan
Robert Santrosyan
56 675