【发布时间】:2021-12-29 13:26:00
【问题描述】:
所以我必须制作这个程序,将一个巨大的 .txt 文件读入 AVL,为此,我需要读取文本文档中的所有格式化数据并将其放入 AVL。但是,每当我尝试在我的代码中初始化 AVL(一个 NULL 指针)时,一旦它到达我用来从 .txt 文件中收集字符串的 fscanf 函数,它就会破坏代码。我在这里制作了这个演示,我认为我非常接近问题的根源。我将其缩小到与在 fscanf 函数之前使用 NULL 值初始化指针有关。但是我该如何解决这个问题?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
FILE * filePointer = fopen("_lexico_shuf.txt", "r");
if(!filePointer) {
printf("can't open the file");
exit(101);
}
char *lexiconWord;
float polarity;
int *a = NULL;
printf("before while");
while (!feof(filePointer)) {
fscanf(filePointer, "%[^;];%f\n", lexiconWord, &polarity);
printf("| (%s) (%.1f) |", lexiconWord, polarity);
}
printf("after while");
}
所以屏幕上打印的唯一内容是“之前”printf,而不是“之后”。然后程序返回一个随机数。
【问题讨论】:
-
在使用
fscanf的结果之前,您应该验证函数是否成功。有关更多信息,请参阅此问题:Why is “while ( !feof (file) )” always wrong? -
请edit 正确格式化您的代码并显示您的
_lexico_shuf.txt文件的前8-9 行。 -
Lucas Nascimento,谁或什么文字建议像
while (!feof(filePointer)) {这样的代码? -
因错误的主要原因关闭。 OP的主要问题是
lexiconWord在调用fscanf(filePointer, "%[^;];%f\n", lexiconWord, ...时未初始化。