2017-01-31 7 views
-2

Когда я запускаю этот код, он печатает символ dos 0 (пробел) один раз, помещает пробел и печатает знак dos 1 (смайлик с белыми глазами и ртом). http://prnt.sc/e2w6bkПочему символ ascii дважды печатается с putchar?

int c = 0, b = 1; 
printf("%c %c", c, b); 

Но когда я запускаю этот код ниже результата печатается дважды. Я либо получаю 2 пробела, либо 2 смайлика. http://prnt.sc/e2w6mt

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

редактировать: Мой код превращает каждый введенный символ в любой ASCII 0 или 1 (я хотел сделать это, чтобы проверить значения с может принимать в этом коде). Если вы хотите взять с персонажа вы даете его, то вы должны использовать

while((c = getchar()) != EOF) 

Используя это будет держать \ п как \ п.

ответ

1

Ваша проблема в том, что символ '\ n' не равен EOF. «\ N» считывается как второй символ.

+0

Я думал, что getchar просто прочитал один символ и перестал читать. Я думаю, что поток персонажей не останавливается. Можете ли вы дать мне ссылку, где я могу узнать, как эта вещь работает именно так? Я хочу учиться. Сейчас я изучаю язык программирования C. – madkobra

+0

Он читает только один символ, но затем ваш цикл выполняется во второй раз и автоматически читается в следующем символе. [Здесь находится справочная страница] (http://www.cplusplus.com/reference/cstdio/getchar/). Это объясняет, что getchar() читает символ из stdin. Вы вводите stdin как «1 \ n», поэтому в вашем первом цикле через него читается 1, затем в следующем цикле он читает «\ n». Если вы измените EOF на «\ n», это устранит проблему. – odin

+0

мой плохой. я должен использовать визуальную студию и отладчик больше, но я не работаю над одним большим проектом. Я выполняю упражнения в книге и быстро сохраняю их в папке как .c-файлы, и я перехожу к следующему упражнению. поэтому его быстрее сделать это в devC++, но я должен использовать отладчик, когда у меня есть проблема. Спасибо за помощь. – madkobra