1

Тема: Не працює функція printf

Працюю в середовищі Pelles C
Пишу програму:

#include <stdio.h>

main()
{
    long nc, oc;

    nc = 0;
    printf("Hello, world1");
    while(getchar() != EOF)
    {
        ++nc;
        printf("%ld\n123\n", nc);
    }
    printf("Hello, world2");
}

При виконанні такої працює лише 2 із 3 функцій printf, тобто виводиться один напис:
Hello, world1
А при натисканні return
1
123
Питання. Де Hello, world2?

2

Re: Не працює функція printf

А як ви EOF передаєте?

3 Востаннє редагувалося Ярослав (29.09.2012 15:13:03)

Re: Не працює функція printf

Я намагаюсь виконати вправу із підручника
Мова програмування C - Браян В. Кернiган, Денiс М. Рiчi
Ось код вправи:

#include <stdio.h>
/* лiчить символи вводу; 1-а версiя */
main()
{
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf("%ld\n", nc);
}

Коли я його караю (execute = виконую = екзекуція = покарання), то бачу перед собою пусте вікно консолі.
Але ж має виводитись значення змінної nc, збільшене на 1. Навіть після Return пусте вікно. Модифікував код (див. перше повідомлення) і побачив, що команда printf, яка зазначена після методу while не працює, навіть якщо потрібно просто вивести текст.
EOF - це, як я зрозумів із книги, End Of File, символ, константа або змінна (тут іще не розібрався), який (яка) вказує на кінець файлу і має ціле значення. У мене в програмі це значення = -1.

4

Re: Не працює функція printf

В мене ось так:

Hello, world1

1
123

2
123

3
123

4
123

5
123
^Z
[11]+  Stopped  

^Z - завершення вводу (CTRL+Z). В принципі за цикл while воно і не може потрапити. Це зі старих книжок, де були термінали і коли завершували введення, то передавався код EOF. Зараз це лише в файлах.

5 Востаннє редагувалося Ярослав (29.09.2012 20:03:23)

Re: Не працює функція printf

Пусте вікно консолі. Що робити?

http://imghost.me/images/2012/09/29/X5WGV.jpg

6

Re: Не працює функція printf

Якщо нажати кілька разів Enter, то нічого не відбувається?

7 Востаннє редагувалося Ярослав (29.09.2012 20:16:24)

Re: Не працює функція printf

Ось мій варіант, останній printf все одно не працює.

http://imghost.me/images/2012/09/29/Gw0sy.jpg

8

Re: Не працює функція printf

Поясню як це все працює, можливо ви не правильно розумієте.

Спочатку виводиться hello world1.
Потім йде виклик функції getchar().
Далі програма не виконується, очікується відповідь від користувача (функція getchar()).
Коли користувач щось вводить (в кінці потрібно не забути натиснути Return), функція повертає значення. Якщо це не EOF, то ми входимо в цикл і відбувається виведення на екран:

1
123

Далі знову викликається функіція getchar() і т.д. поки вона не поверне EOF.
Для того щоб передати управляючий символ кінця файлу, необхідно:
на Unix - CTRL+D
на Windows - CTRL+Z (у вашому випадку).
Після цього всього ми вийдемо з циклу і повинно вивести Hello, world2.

Post's attachments

Screen Shot 2012-09-29 at 9.23.28 PM.png 27.43 kb, 240 downloads since 2012-09-29 

9

Re: Не працює функція printf

Тепер все стало зрозуміло.

10

Re: Не працює функція printf

P.S. Як для новачків книга К&Р важкувата. Рекоментовав би Стівена Кочана.

11

Re: Не працює функція printf

На переправі коней не міняють) Якщо виникатимуть труднощі - буду звертатись сюди і тим самим розвиватиму форум.