2016-06-15 4 views
0

Так что я сейчас пытаюсь прочитать символ входного файла по символу, и я пытаюсь увидеть, когда возникает новая строка. Я получаю все символы в порядке, но вместо «\ n» для новой строки я получаю «á» или -97, если я передам ее в int. Вот мой код, и я использую VS 2015Чтение новой строки в C

int main(void) { 
    FILE *fp; 
    fp = open_input_file(); 
    if (fp != 0) { 
     char ch = read_character(fp); 
     int d = (int)ch; 
     while (ch != EOF) { 
      printf("%d\n", d); 
      ch = read_character(fp); 
      d = (int)ch; 
     } 
    } 
    getch(); 
    return 0; 
} 
char read_character(FILE *infile) { 

    int c; 
    c = getc(infile); 

    return (char) c; 
} 
+0

что вы хотите спросить? не могли бы вы быть более ясными? –

+2

Вы продолжаете кастинг в и из 'int'. Просто придерживайтесь 'int', как было возвращено' getc', для типа функции тоже .. –

+0

Просто подумайте дважды, чтобы это могло означать, что вам нужно использовать молот для литья здесь: 'return (char) c;'. Общее эмпирическое правило в C: Если вы видите, что вы столкнулись с необходимостью бросить, то вы либо дамп, либо умный. Обычно вам нужно бросать только в * очень редких * обстоятельствах. – alk

ответ

0

Вы можете обнаружить строку с незначительными изменениями в существующий код:

int main(void) { 
    FILE *fp; 
    fp = open_input_file(); 
    if (fp != 0) { 
     int ch = read_character(fp);//change to int return (getc() returns int) 
     if(ch == '\n') //A simple comparison here will detect newline 
     { 
      printf("Found Newline: %d\n", ch); 
     } 
     ///int d = (int)ch;// not necessary with current changes 
     while (ch != EOF) { 
      //printf("%d\n", d); 
      ch = read_character(fp); 
      if(ch == '\n')//Note: ASCII for \n is value 10, or hex A 
      { 
       printf("Found newline: %d\n", ch); 
      } 

      //d = (int)ch; 
     } 
    } 
    getch(); 
    return 0; 
} 

int read_character(FILE *infile) 
{ //changed prototype to return int 

    int c; 
    c = getc(infile); 

    return c;//modified return value to int 
} 
+1

С этими изменениями в первую очередь нет необходимости в функции 'get_character', она идентична' getc'. – Barmar

+0

Этот приведение здесь 'int d = (int) ch;' бесполезно. – alk

+0

@Barmer - правда. Не уверен, что здесь больше значения для изменения или для OP. – ryyker

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