![]() |
|
Модераторы: bsa |
![]()
|
|
| APXEOLOG |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 12.4.2007 Где: Мурманск Репутация: нет Всего: 1 |
Начал учить си по учебнику Б. Кернигана и Д. Ритчи.
В разделе про ввод\вывод там приведен такой код:
И вот теперь вопрос: getchar() возвращает код символа. Как можно код символа сравнивать с '\n' ?? Еще вопрос: когда я запускаю программу то она так и не выдает результата, а все принимает и принимает строки. Почему? я думал что While относиться только к разовому прохождению getchar по введенной строке... Это сообщение отредактировал(а) APXEOLOG - 8.1.2009, 23:03 --------------------
Ученые долго не знали как назвать частоту.Потом так и назвали Hz. |
|||
|
||||
| pan2004 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 357 Регистрация: 28.7.2007 Репутация: 2 Всего: 9 |
А что такое '\n', знаешь? Это символ новой строки. Впринципе, об этом недвусмысленно в комментариях и сказано. Наверное, ждет символа конца файла(EOF). Как он вводится с клавиатуры - не помню, Ctrl + чтототам |
|||
|
||||
| APXEOLOG |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 12.4.2007 Где: Мурманск Репутация: нет Всего: 1 |
А правда что если писать "\n" - то это будет восприниматься как 2 симвоа (\n) а если писать '\n' - то это будет восприниматься как код новой строки?
И как сделать чтобы getchar() обрабатывал только 1 введенную строку (вписал строку нажал ентер и все) С помощью чего можно узнать он нажатии кнопки (например стрелочек)? Это сообщение отредактировал(а) APXEOLOG - 9.1.2009, 13:05 --------------------
Ученые долго не знали как назвать частоту.Потом так и назвали Hz. |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
pan2004, Ctrl^z
|
|||
|
||||
| Avaj |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 212 Регистрация: 14.7.2008 Где: Владивосток. Репутация: 1 Всего: 3 |
Нет, всё что в кавычках - строки, в данном случае, "\n" - строка из одного символа - '\n'.(ну возможно в конце ещё есть '\0')
По-моему getchar() аргументом принимает символ (с клавиатуры), а не строку. Если тебе нужно строку, лучше gets().
Я так подозреваю с помощью getchar(), но точно не знаю, тут в google можно обратиться, или подождать когда ответят знающие люди. И ещё по языку Си есть учебник Подбельского, там по-моему по-подробней написано, хотя конечно "K&R" - "must read" Это сообщение отредактировал(а) Avaj - 9.1.2009, 14:12 |
||||||
|
|||||||
| seravr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 3.1.2009 Репутация: нет Всего: нет |
Объясняю все по пунктам:
1) писать надо либо void main() { . . . } но лучше на первых порах пиши int main() { . . . return 0; } со временем сам поймешь 2) getchar()-(прототип int getchar(void))-считывает очередной символ из стандартного входного потока 3) у тебя в программе инициализируются 2 переменные типа int: c-в нее записывается очередной считанный символ из входного потока, nl-счетчик числа строк, т.е. сколько раз встречается '\n'-символ новой строки 4)в цикле while условием является строчка (с = getchar()) != EOF советую тебе выучить наизусть приоритет операций языка С!!! Давай разберем это условие, во-первых, истинно оно будет всегда, пока очередной символ,считанный из входного потока,не равен EOF(для Windows это комбинация клавишь Ctrl^z, как сказал это уже yngwie19) (с = getchar()) != EOF Покажем как это работает: сначала работает с = getchar(), функция читает символ из входного потока и возвращает его значение типа int, затем его мы присваиваем переменной с, затем мы проверяем !=(не равно) EOF, если не равно-значит истина и мы попадаем в тело цикла Там стоит if (c == '\n') если с не равно '\n', переходим к проверке условия в цикле. а если с равно '\n', то увеличиваем счетчик ++nl, затем переходим опять к проверке условия, и так пока ты не введешь комбинация клавишь Ctrl^z Когда наконец-то ты введешь комбинация клавишь Ctrl^z,условие в цикле с = getchar()) != EOF станет ложным, и мы покидаем цикл и переходим к следующей строчке printf(“%d\n”, nl);, где мы выводим значение счетчика, затем должна стоять строчка return 0, которая передает управление в твоем случае Windows Мой совет тебе, почитай Подбельского, выучи таблицу приоритетов операций, уясни как работают циклы, что для них является ложью и истинной, и на последок, старайся всегда инициализировать все переменные в их объявлении, потому что в них храниться мусор и это может приводить к логическим ошибкам и т.д. P>S> НА СИНТАКСИЧЕСКИЕ ОШИбКИ НЕ ОбРАЩАЙТЕ ВНИМАНИЯ |
|||
|
||||
| APXEOLOG |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 12.4.2007 Где: Мурманск Репутация: нет Всего: 1 |
Спасибо, сажусь за теорию углубленно.
===== Может ли функция возвращать массив значений? (Без использования указателей и изменения глобальных переменных) Это сообщение отредактировал(а) APXEOLOG - 9.1.2009, 16:16 --------------------
Ученые долго не знали как назвать частоту.Потом так и назвали Hz. |
|||
|
||||
| pan2004 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 357 Регистрация: 28.7.2007 Репутация: 2 Всего: 9 |
1. Используй ссылки(хотя все равно почти что указатели) 2. можно возвращать переменные любых типов, в тч классы и структуры. Туда можно что угодно запихнуть
"\n" - строка из двух символов, '\n' и '\0' эскейп последовательности типа \n \t usw компилятором всегда преобразуются в соответствующие символы. |
||||
|
|||||
| seravr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 3.1.2009 Репутация: нет Всего: нет |
не забивайте человеку голову ссылками, пусть изучит сначала поглубже язык С
Стек то не резиновый Это сообщение отредактировал(а) seravr - 9.1.2009, 17:48 |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 8 Всего: 56 |
||||
|
||||
| seravr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 3.1.2009 Репутация: нет Всего: нет |
что зачем?
если он указатели то не понимает, зачем ему про ссылки рассказывать Это сообщение отредактировал(а) seravr - 9.1.2009, 23:09 |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |