| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > getchar() и несложный алгоритм |
| Автор: APXEOLOG 8.1.2009, 22:58 | ||
| Начал учить си по учебнику Б. Кернигана и Д. Ритчи. В разделе про ввод\вывод там приведен такой код:
И вот теперь вопрос: getchar() возвращает код символа. Как можно код символа сравнивать с '\n' ?? Еще вопрос: когда я запускаю программу то она так и не выдает результата, а все принимает и принимает строки. Почему? я думал что While относиться только к разовому прохождению getchar по введенной строке... |
| Автор: pan2004 9.1.2009, 00:11 |
А что такое '\n', знаешь? Это символ новой строки. Впринципе, об этом недвусмысленно в комментариях и сказано. Наверное, ждет символа конца файла(EOF). Как он вводится с клавиатуры - не помню, Ctrl + чтототам |
| Автор: APXEOLOG 9.1.2009, 13:03 |
| А правда что если писать "\n" - то это будет восприниматься как 2 симвоа (\n) а если писать '\n' - то это будет восприниматься как код новой строки? И как сделать чтобы getchar() обрабатывал только 1 введенную строку (вписал строку нажал ентер и все) С помощью чего можно узнать он нажатии кнопки (например стрелочек)? |
| Автор: yngwie19 9.1.2009, 13:54 |
| pan2004, Ctrl^z |
| Автор: Avaj 9.1.2009, 14:02 | ||||||
Нет, всё что в кавычках - строки, в данном случае, "\n" - строка из одного символа - '\n'.(ну возможно в конце ещё есть '\0')
По-моему getchar() аргументом принимает символ (с клавиатуры), а не строку. Если тебе нужно строку, лучше gets().
Я так подозреваю с помощью getchar(), но точно не знаю, тут в google можно обратиться, или подождать когда ответят знающие люди. И ещё по языку Си есть учебник Подбельского, там по-моему по-подробней написано, хотя конечно "K&R" - "must read" |
| Автор: seravr 9.1.2009, 15:21 |
| Объясняю все по пунктам: 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 9.1.2009, 16:13 |
| Спасибо, сажусь за теорию углубленно. ===== Может ли функция возвращать массив значений? (Без использования указателей и изменения глобальных переменных) |
| Автор: seravr 9.1.2009, 17:46 |
| не забивайте человеку голову ссылками, пусть изучит сначала поглубже язык С Стек то не резиновый |
| Автор: vinter 9.1.2009, 18:09 | ||
зачем? может еще какой язык посоветуешь перед С++? |
| Автор: seravr 9.1.2009, 23:07 |
| что зачем? если он указатели то не понимает, зачем ему про ссылки рассказывать |