Я пытаюсь прочитать строки в текстовом файле в буфер, указав функции номер строки в качестве параметра. Затем эта функция копирует текст, содержащийся в этой конкретной строке файла, в переменную retreiveString
для использования. У меня проблема в том, что если в самом конце текстового файла нет «пустой строки», программа не копирует последнюю запись в буфер. Что я делаю не так?
пример текстового файла, который читается правильно
строка 0
строка 1
пример текстового файла, который не читает в последнюю строку в буфер (т.е. строка 1).
строка 0
строка 1
//test2
#include <stdio.h>
#include <string.h>
#define BUFFER_SIZE 80
char read_in_buffer[BUFFER_SIZE];
char retreivedString[BUFFER_SIZE];
void getString(int lineNum);
int maxDataNum = 0;
bool endOfFileReached = false;
int main(void){
printf("-Main-\n");
getString(1);
printf("retrieved:%s\n",retreivedString);
printf("maxdata: %d\n",maxDataNum);
printf("strlen: %d",strlen(retreivedString));
/*
getString(2);
printf("retrieved: %s\n",retreivedString);
printf("maxdata: %d\n",maxDataNum);
getString(4);
printf("retrieved: %s\n",retreivedString);
printf("maxdata: %d\n",maxDataNum);
*/
return 0;
}
void getString(int lineNum){
FILE *fin=fopen("file1_Windows.txt","r");
int line_number = 0;
char *temp;
if(fin==NULL){
printf("cannot open file1_Windows.txt\n");
}
while (1){
memset(read_in_buffer,0,sizeof(read_in_buffer));
fgets(read_in_buffer,sizeof(read_in_buffer),fin); //change to segment size?
if (!feof(fin)) {
if (lineNum == line_number){
memset(retreivedString,0,sizeof(retreivedString));
strcpy(retreivedString,read_in_buffer);
}
//printf("current line %d: ",line_number);
//printf("%s",read_in_buffer);
line_number++;
}else {
fclose(fin);
printf("End-of-File reached. \n");
maxDataNum = line_number;
printf("maxdata: %d\n",maxDataNum);
if (lineNum == maxDataNum){
endOfFileReached = true;
}else if (lineNum > maxDataNum){
printf("file read error, you're reading further that data on file\n");
}
break;
}
}
}