я стартер и я написал код
О, о! Здесь идет ... Во-первых, шансы на успешное изучение портативного стандартного языка программирования C - это подавляюще низкий для тех, кто пытается учиться неуправляемой проб и ошибок. Есть действительно хорошо книга, которую вы можете использовать в качестве руководства, но вам нужно читать И делать упражнения, как вы спотыкаетесь через них. Это K & R2E, если вам интересно.
Все напоминающее char c; c = getchar();
является ошибочным, так как сужающее преобразование из int
(которого getchar
возвращается) ошибка char
Отбрасывает обработку информации.
Все символьные значения, возвращаемые getchar
будет как unsigned char
значения преобразуются в int
, так что было бы технически быть правильнее (хотя еще неверны), чтобы использовать этот тип.
Значения ошибок возвращаются как отрицательное целое число, такое как EOF
, чтобы их не путали с символьными значениями, что именно то, что ваш код делает неправильно, отбрасывая информацию об ошибке.
getchar
возвращает int
, поэтому хранить значение в int
, а затем проверить на наличие ошибок, затем, если вы должны, преобразующие его вниз к unsigned char
.
и теперь у меня есть идея, что я хочу, чтобы добавить заявление перерыв, что, когда я типа д, программа сломается.
Исходя из предыдущего обсуждения, такое требование является излишним, тем не менее, легко включить , если вы правильно обработки ошибок.Просто добавьте дополнительный тест, чтобы он соответствовал q
в обработке ошибок, и престо!
Тем не менее, обработка, скорее всего, уже ошибка решает эту проблему, так как большинство операционки имеет механизм для близко stdin
, что вызвало бы getchar
вернуть EOF
, тем самым вызывая ошибку обработки положения. Обычно это достигается нажатием CTRL + d в Linux или CTRL + z в Windows.
В заключение, если вы еще не читаете, кажется, что хорошая книга о C - это не все, что принесет вам пользу; хорошая книга о консольных скриптах для ваших любимых Unix-подобных ОС также будет очень полезна.
Начните с изучения того, как избежать использования 'глобальных переменных', когда не нужно –
@SeekAddo Что вы имеете в виду * global *? Эти переменные имеют внутреннюю связь, поэтому они не видны другим модулям ... Не могли бы вы показать мне, где в [стандарте C] (http://www.iso-9899.info/n1570.html) я могу найти Дополнительная информация о * глобальных переменных *? Я хотел бы узнать, как объявлять и использовать их ... – Sebivor
@Seb Глобальные переменные могут быть доступны из любой точки приложения. Некоторыми они могут считаться плохой практикой, поскольку переменные могут быть изменены другой функцией. 'char c; '' char a [100] = {0}; '' int i; 'были определены вне' main'. Любая функция внутри этого приложения может получить к ним доступ, для которой существует плохая практика. –