我编写了一个从名为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。
答案 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;