当试图返回文本文件的第一行时,fscanf返回-1。

问题描述 投票:0回答:1

我试图简单地从一个文本文件中返回第一个值,我把它叫做 time_temp.txt. 这个文件的内容是:

1588567745.203
1588567745.203
1588567745.204
1588567745.204
1588567745.204
1588567745.205
1588567745.205
1588567745.205
1588567745.206
1588567745.206

我所要做的就是返回第一行的值 -- 所以在这种情况下: 1588567745.203.

当我做 fscanf它返回的值是-1,在我的控制台里面有一些符号。我一直在尝试用不同的操作符类型在 fscanf 函数,但似乎没有返回我所期望的值。

我的代码的简单表示。

#include <iostream>

using namespace std;

string startTime;

int main()
{
    FILE *fTime =  fopen("time_temp.txt", "w+");

    cout << fscanf(fTime, "%s\n", &startTime) << endl;
    printf("nfirst = %s\n",startTime);

    fclose(fTime);
    return 0;   
}

还要注意的是,这是C++98的代码。

c++ file scanf
1个回答
0
投票

您可能收到的是 NULL 由于 fopen(3) (该文件是否真的存在?你是否有权限在该文件上写?在该目录下?)

把你的代码改成。

#include <iostream>

using namespace std;

string startTime;

int main()
{
    FILE *fTime =  fopen("time_temp.txt", "w+");

    if (!fTime) {
        perror("fopen");
    }

    cout << fscanf(fTime, "%s\n", &startTime) << endl;
    printf("nfirst = %s\n",startTime);

    fclose(fTime);
    return 0;   
}

你可能就会知道是怎么回事了 你可能没有适当的访问权限来创建一个叫做 time_temp.txt 在您当前的目录中, fopen(3) 返回 NULL,你最终叫 fscanf(NULL, "%s\n", ....

© www.soinside.com 2019 - 2024. All rights reserved.