【问题标题】:fscanf doesn't read anythingfscanf 不读取任何内容
【发布时间】:2013-06-12 17:10:33
【问题描述】:

我正在尝试从文件中读取整数,而 fscanf 不能很好地处理此代码。

fp=fopen("record.dat","r");
if(fp==NULL)
{
    printf("Another reading error");
}
else
{
    printf("\nstarting to read\n");
    i=0;
    while(i<10)
    {
        if(fscanf(fp,"%d",&temp)>0)
        printf("%d\n",temp);
        i++;
    }
    fclose(fp);
}

该文件包含 10 个由换行符分隔的数字。此代码不会产生或打印任何东西。代码有什么问题,请帮助我。

编辑 w+r 的访问模式没有给我一个正确的预期答案。

【问题讨论】:

  • @BLUEPIXY w+ 是读写模式。它有什么区别?我也试过了。结果没有差异。
  • 如果您无法在“r”模式下阅读,我认为文件中的格式不同。
  • @max 它的不同之处在于"w+" 将您的文件截断为 0 长度的位,在这种情况下,任何在您先写入内容之前从文件中读取内容的尝试都将无法产生有用的结果.
  • 哦,文件的内容已经丢失了。

标签: c file


【解决方案1】:

您将文件作为可写文件而不是可读文件打开。

您必须将"w+" 更改为"r"

w+ The file is created if it does not exist, otherwise it is truncated. The stream is positioned at the beginning of the file.

【讨论】:

  • w+ 为读写模式。它有什么区别?我也试过了。结果没有差异。
  • 更改格式字符串,您没有读取换行符。看我的更新。如果文件存在,则会被截断,因此它将为空,w+
  • "%d\n" 是必需的吗?我的意思是 fscanf 流式传输数据,直到它得到任何空白,对吗?是的,谢谢你的回答。我得到了输出。文件 record.dat 不在同一目录中。
  • 我现在不能 100% 确定,已经有一段时间了。我认为你的主要问题是 w+。我删除了换行符的建议。
【解决方案2】:

"w+" 实际上打开文件进行读写。但是,文件被截断为0 长度。
这可能是打印空行的原因。
试试"r+"(打开文件进行读写,不截断)或"r"

【讨论】:

    猜你喜欢
    • 2014-12-29
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    • 2014-08-20
    • 2011-05-06
    • 1970-01-01
    • 2016-02-21
    相关资源
    最近更新 更多