Читать только последние 3 символа с конца файла и сохранять их как int - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь написать функцию, которая должна читать последние три символа из определенного файла .txt и возвращать мне значение как int.

пример того, что содержит файл: «***** ***** 505 ".

когда я запускаю код, функция возвращает мне« 505 », но также дает мне« / 377? »Ниже. Я заметил похожий существующий пост, но не смог разрешить проблема Мне нужна дополнительная помощь.

функция:

int readClientiD(){
    FILE *fp;
     char ch;
     int num=4;
     long length;

     fp = fopen("ClientList.txt", "r");
     if (fp == NULL) {
        puts("cannot open this file");
        exit(1);
     }

     fseek(fp, 0, SEEK_END);
     length = ftell(fp);
     fseek(fp, (length - num), SEEK_SET);

     do {
        ch = fgetc(fp);
         cout<< ch;
     } while (ch != EOF);
     cout<<endl;
     fclose(fp);
     return(0);
}

1 Ответ

0 голосов
/ 29 мая 2020

Вы распечатываете значение ch сразу после его прочтения и перед проверкой на EOF. Сначала вам нужно выполнить проверку.

do {
    ch = fgetc(fp);
    if (ch == EOF) break;
    cout << ch;
} while (true);

Или:

while ((ch = fgetc(fp)) != EOF) {
    cout << ch;
}

Независимо от того, подписан ли char или нет, это не указано в C и стандарты C ++, поэтому решение остается за реализацией компилятора. EOF определяется как имеющее отрицательное значение, которое в большинстве реализаций равно обычно -1. Когда -1 рассматривается как беззнаковый char, он имеет десятичное значение 255, шестнадцатеричное 0xFF, восьмеричное 377, что означает, что char, скорее всего, беззнаковый в вашей системе. .

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