fscanf无法读取含星号字符的文件问题求助
排查fscanf读取失效、count为0的问题
我来帮你梳理下可能导致这个问题的几个常见原因,结合你给出的代码片段逐一分析:
格式符与文件内容不匹配(最可能的原因)
你提到文件里是由*组成的空框,但如果你的fscanf用了错误的格式符(比如%d读取整数、%f读取浮点数),那完全匹配不上*字符,fscanf会直接返回0,也就是成功读取的变量数为0。
举个例子:如果文件里全是********这类字符,你却写了count = fscanf(fp, "%d", &number);,那必然匹配失败,count就是0。这种情况下,你应该用%c读取单个字符,或者用fgets读取整行内容。打开的文件实际为空
虽然你说没有打印错误说明文件成功打开,但有可能是程序运行的当前目录和你存放map%d.txt的目录不一致,导致打开的是一个新建的空文件(注:fopen用"r"模式找不到文件会返回NULL,所以更可能是你确实有这个文件,但文件内容为空)。
你可以在打开文件后加一段代码验证文件大小:fseek(fp, 0, SEEK_END); long file_size = ftell(fp); rewind(fp); printf("File size of %s: %ld bytes\n", filename, file_size);如果输出是0,那就是文件本身为空,自然读不到内容。
文件指针位置异常
虽然用"r"模式打开文件时,指针默认在开头,但如果打开文件后你不小心执行过其他读取操作(比如误调用了fgetc),那指针会偏移到文件中间,后续fscanf就可能读不到内容。可以在读取前加rewind(fp);重置指针到文件开头试试。
快速调试建议
你可以在打开文件后,先把文件内容打印出来,看看程序实际能读到什么:
FILE *fp = fopen(filename, "r"); if (!fp) { perror("Failed to open file"); return -1; } // 打印文件内容用于调试 printf("Debug: Content of %s:\n", filename); char ch; while ((ch = fgetc(fp)) != EOF) { putchar(ch); } rewind(fp); // 重置指针,继续后续读取逻辑
这样就能直观看到程序读取到的内容是否和你预期的一致,快速定位问题。
内容的提问来源于stack exchange,提问作者Bomb FX
相关产品推荐
相关产品推荐

