Очень простой C-вопрос с использованием getchar () и putchar () - PullRequest
1 голос
/ 09 мая 2011

Здравствуйте, я учу себя C и изучаю книгу K & R, и у меня возникли некоторые проблемы (я использую OS X). Это из раздела 1.5.1 «Копирование файлов», который должен принимать символ в качестве ввода, а затем выводить символ. Вот код:

#include <stdio.h>

/* --  Copy input to output -- */ 
int main(void)
{
int c;

c = getchar();

while ( c != EOF ) {
    putchar(c);
    c = getchar;
}


}

Итак, я думаю, что моя проблема не в самом коде, а в компиляции и запуске. Прежде всего, при компиляции я получаю следующие ошибки

/Volumes/Goliath/Dropbox/C programs/prog1_5_1.c: In function ‘main’:
/Volumes/Goliath/Dropbox/C programs/prog1_5_1.c:12: warning: assignment makes integer from pointer without a        cast
/Volumes/Goliath/Dropbox/C programs/prog1_5_1.c:16: warning: control reaches end of non-void function

Затем, когда я запускаю выходной файл (в терминале), он имеет небольшой пробел, затем, когда я ввожу букву, скажем, что я набираю

а

тогда я нажимаю Return

и я получаю новую строку. Если я тогда нажму новую клавишу, экран начнет сходить с ума от вопросительных знаков повсюду.

Я не уверен, что в этом много смысла, но я считаю, что это странная проблема. Большое спасибо заранее

Ответы [ 3 ]

5 голосов
/ 09 мая 2011

Второе назначение должно быть c = getchar();. Оставляя скобки, вы присваиваете адрес функции getchar для c, что совсем не то, что вам нужно.

Кроме того, в конце main вам понадобится строка return 0; или аналогичная для того, чтобы избавиться от предупреждения «Управление достигает конца не пустой функции».

2 голосов
/ 09 мая 2011

вы пропустили () в getchar в строке 12. без скобок "getchar" вычисляет адрес функции, поэтому вы получаете предупреждение о приведении указателя к int

1 голос
/ 09 мая 2011

Вам не хватает скобок после 2-го getchar.

Это означает, что вы назначаете место в памяти метода для переменной c, что вызывает бесконечный цикл, поскольку оно никогда не равно EOF.

...