You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:29:13