Как я могу заставить getc() возвращать символ, кроме смайлика?

Я пытаюсь написать простой клон «кошки» на C. Я использую Windows 7 и использую компилятор MinGW. Однако всякий раз, когда я запускаю программу, она возвращает текстовый файл, но каждый символ заменяется символом «☺». Заранее спасибо.

#include <stdio.h>

int main(int argc, char *argv[])
{
    int i;
    FILE *fp;
    int c;

    for(i = 1; i < argc; i++)
    {
        fp = fopen(argv[i], "r");

        if(fp == NULL)
        {
            fprintf(stderr, "cat: can't open %s\n", argv[i]);
            continue;
        }

        while((c = getc(fp) != EOF))
        {
            putchar(c);
        }

        fclose(fp);
    }

    return 0;
}

person pstap92    schedule 13.10.2011    source источник


Ответы (1)


Поскольку реляционная проверка на равенство (!=) имеет больший приоритет, чем присваивание (=), вы просто будете сохранять 1 в c на каждой итерации. Другими словами, одна из скобок находится не на том месте.

while((c = getc(fp) != EOF))
                          ^
{
        putchar(c);
}

Верно:

while((c = getc(fp)) != EOF)
{
        putchar(c);
}
person cnicutar    schedule 13.10.2011
comment
Огромное спасибо. Ваше объяснение действительно очень помогло. :) - person pstap92; 13.10.2011