2012-07-05 5 views
0

Я хотел бы знать, почему моя программа получает неправильный результат. Мне просто нужно прочитать символы из файла, включая пробел, (.), (,) И другие, и вывести их в определенном строчном формате. В результате я получаю более 300 экземпляров чтения символов и их странное представление. Мне нужно напечатать фактический символ и его расположение в памяти. Ценить это!читать char из файла

34 instances of character : 
35 instances of character ¼ 
36 instances of character ¼ 
37 instances of character ¼ 

    #include <stdio.h> 

    int main() 
    { 
    char ch; 
    int characters[100]; 
    int i,j,k; 
    int charCount = 0; 

    FILE *fPtr; 
    fPtr=fopen("input.txt", "r"); 

    while(ch = fgetc(fPtr) != EOF) 
    { 
    i=0; 
    characters[i] = (char)ch; 
    i++; 
    } 

    int arrayLength = sizeof(characters)/sizeof(characters[0]); 

    for(j= 0; j < arrayLength; j++) 
    { 
    for(k=1; k < arrayLength; k++) 
    { 
     if(characters[j] == characters[k]) 
    { 
     charCount++; 
      printf("%d instances of character %c in location %c \n", charCount, characters[j], &characters[j]); 
    } 
    } 
    } 
} 
+1

'while (ch = fgetc (fPtr)! = EOF)' - er, приоритет оператора, не должен быть «ch = fgetc (fPtr)» в скобках? – Random832

+0

Это звучит как вопрос домашней работы. Кроме того, вы не смотрите NULL, поэтому вы анализируете весь блок памяти независимо от того, сколько вы на самом деле пишете. – Wug

+0

'location% c' ->' location% p' – BLUEPIXY

ответ

1

Помните: fgetch() возвращает int. Не char. См. man page.

Это потому, что константа EOF больше, чем символ, поэтому в возвращаемом значении должно быть больше бит, чтобы иметь возможность выражать «любой символ, или EOF».

Другими словами, EOF не является символом, это пример связи out-of-band.

Кроме того, ваша скобка выглядеть странно, вы, вероятно, имели в виду:

while((ch = fgetc(fPtr)) != EOF && ch != '\n') 

Примечания внутренней скобки вокруг присваивания, только.

+1

Кроме того, вы переставляете 'i' i в 0 на каждой итерации цикла while. –

+0

@ H2CO3 Разве этот комментарий не должен упоминаться в разделе комментариев? – legends2k

+0

@ legendends2k правильно, извините, контролируйте это ... –

Смежные вопросы