无法从文件中读取

时间:2012-09-02 19:37:20

标签: c++ c file-io

我编写了一个从名为network.dat

的文件中读取的代码

我写的代码是

    f = fopen("network.dat", "r");
    if(f == NULL)
        exit(1);
    int read, N;

    printf("%p\n", f);//output file pointer, included this just to check if file is opened properly
    fscanf(f, "%d%d", &N, &read);//error here
    cout<<N; 

正在正确打开文件并且正在获取文件指针(49897488)作为输出,但是后面的行是程序停止工作的地方,我没有得到N作为输出。 请告诉我们是否需要其他细节。 network.dat的内容是

10 1
1   6   1.28646
1   7   1.2585
2   9   1.33856

等等。我只关注文件中的前2个数字,即10和1。

4 个答案:

答案 0 :(得分:1)

您的scanf()格式字符串不正确。 “%d,%d”查找以逗号分隔的两个整数。如果要读取由空格分隔的两个整数,只需执行“%d%d”。

答案 1 :(得分:1)

这似乎适用于Srijan。代码是一个快速而肮脏的剪切和粘贴作业,样式为零点,但它可以作为测试工作。似乎记录中的字段数需要与打印格式字符串中的字段匹配。我在1.9999的记录1上的测试数据中添加了第3个字段并且它有效。我怀疑这是一个技术上纯粹的解释。

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <cstring>
#include <cstdlib>
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
using std::ios;

int main(int argc, char *argv[])
{
//int read;
//int N;
int res;
FILE *f;


f = fopen("network.dat", "r");
    if(f == NULL)
        exit(1);
    int read, N;
    float f3;

    printf("%p\n", f);//output file pointer, included this just to check if file is opened properly
    for (;;)
        {
    res = fscanf(f, "%d%d%f", &N, &read, &f3);//error here
    if (res <= 0)
        {
        printf("err %d\n",errno);
        break;
        }
    cout<<N << " " << read << "\n";
        }
}

答案 2 :(得分:0)

您的代码需要文件中的所有字符,直到第一个空格为int。如果文件不以int开头,那可能是它失败的原因。

答案 3 :(得分:0)

正如我在my comment中所述,问题是您的格式说明符不正确。尝试

fscanf(f, "%d%d", &N, &read);

因为你正在使用cout我猜测这实际上是C ++代码...老实说,你应该这样做是规范的C方式。相反,请使用ifstream

std::ifstream input("network.dat");
int N, read;
input >> N >> read;
std::cout << N << ' ' << read << std::endl;