我正在创建一个程序来读取文件并计算.txt有多少单词。该程序工作正常,问题是如果txt有一个断行线它停止读取,所以我必须把我的所有文本放在一行。据我所知,问题出在fgets中,当它到达EOF或换行时会停止读取。我的问题是:即使使用新行,我如何读取文本?我必须使用fread()吗?如果是的话,我会这样做吗?下面是我读取.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 :(得分: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
答案 1 :(得分:0)
使用fgets()从文件中逐行获取并在该行上执行操作。
while(fgets (linha, sizeof(linha),myFile) != NULL)
{
// perform the action on the line.
}
使用sizeof(linha)
作为要读取的字符数。