2014-11-22 2 views
0

Я делаю программу, которая читает файл и подсчитывает, сколько слов имеет .txt. Программа работает нормально, проблема в том, что если txt имеет строку прерывания, она перестает читать, поэтому я должен поместить весь текст в одну строку. Насколько я знаю, проблема в fgets, которая перестает читать, когда она достигает EOF или новой строки. Мой вопрос: как я читаю свой текст даже с новыми строками? Нужно ли мне использовать fread()? Если да, я бы сделал? Ниже приведена часть кода, где я читаю .txt и помещаю в массив.C - Читает новую строку в .txt

char linha[10000]; 
int grandezaStrings = 100000; 
int i = 0; 
int contadorString = 0;  

    // This line reads the file. 
    fgets (linha, grandezaStrings,myFile); 

    // Used for special characters 
    setlocale (LC_ALL,"PORTUGUESE"); 

    // Dynamic array to hold words 
    char ** strings = (char **)malloc(grandezaStrings * sizeof (char*)); 
    char * pch; 
    for (i=0;i<grandezaStrings; i++){ 
     strings[i] = (char *)malloc(100+1); 
    } 

    // Transfer all the words to my array. 
    i = 0; 
    pch = strtok(linha, " ,.!?:;()\n"); 
    while (pch != NULL){ 
     strlwr(pch); 
     strings[i] = pch; 
     contadorString++; 
     pch = strtok (NULL, " ,.!?:;()\n"); 
     i++; 
    } 

Большое спасибо!

+0

'fgets (linha, grandezaStrings, myFile);' -> 'fgets (linha, sizeof linha, myFile);': 'grandezaStrings' не соответствует слишком большому. – BLUEPIXY

+0

'strings [i] = pch;' -> 'strcpy (строки [i], pch);' – BLUEPIXY

+1

fgets получает одну строку, вам нужно сделать (fgets (...)! = NULL), чтобы получить все файл – billpcs

ответ

0

fgets читает до следующей новой строки. Это по дизайну. Вы могли бы петлю (while (fgets(...) != NULL)), или если вы хотите, чтобы загрузить все в памяти в одном чтении, вы можете просто использовать fread:

// This line reads the whole file. 
i = fread (linha, 1, grandezaStrings,myFile); 
if (i < 0) { // test read Ok 
    perror("Lettura"); 
    return 1; 
} 
linha[i] = '\0'; // add the terminating null 
0

Используйте fgets(), чтобы получить строку за строкой из файла и выполнить операцию на линии.

while(fgets (linha, sizeof(linha),myFile) != NULL) 
{ 
// perform the action on the line. 
} 

Используйте sizeof(linha) как количество символов для чтения.

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