Почему этот код не работает?Что с ними не так? - PullRequest
0 голосов
/ 07 июля 2011
#include < stdio.h >

#include < string.h >

int main()

{

unsigned char a;

FILE *P;

P=fopen("mola.txt","r");

while((a=getc(P))!=EOF)

printf("%c",a);

}

Что не так с этим кодом?Когда я компилирую, он выдает предупреждение «сравнение всегда верно из-за ограниченного диапазона типов данных».Что означает это предупреждение?

Ответы [ 4 ]

7 голосов
/ 07 июля 2011

Вы сохраняете результат getc в char.Это должно быть int.Там также есть C FAQ .Также вы должны проверить возвращаемое значение fopen.

P=fopen("mola.txt","r");
if (NULL == P) {
    perror("fopen"):
}

Также while выглядит подозрительно.Попробуйте сделать отступ?

while((a=getc(P)) != EOF)
    printf("%c",a);
1 голос
/ 07 июля 2011

Попробуйте:

#include <stdio.h>
#include <string.h>
int main()
{
int a;
FILE *P;
P=fopen("tryit2.c","r");
while(EOF != (a = fgetc(P))) {
        printf("%c",a);
    }
}

У вас было две проблемы "getc ()" возвращает целое число, а не символ. И у оператора while были странные побочные эффекты в первоначальном порядке.

1 голос
/ 07 июля 2011

Это означает только то, что говорится

сравнение всегда верно из-за ограниченного диапазона типов данных.

Диапазон рассматриваемых типов данных (a, то есть unsigned char), от 0 до 255 (на самом деле UCHAR_MAX);

Значение EOF равно -1

Вы сравниваете a (из 0до 255) с -1

(a != -1)

условие всегда будет истинным

0 голосов
/ 07 июля 2011

Это означает, что цикл попадет в бесконечный цикл, не позволяя программе завершиться при a=getc(p).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...