我在加载此文件时遇到问题。
第一个数字是后续序列中将包含多少个字符/数字。我不知道/不知道如何判断这些是数字还是字符。
这是我的代码:
文本文件是:
3
001
100
int main(int argc, char** argv)
{
int *array =0;
array = LoadConfig(argv[1]);
return 0;
}
int* LoadConfig(char * Filename)
{
FILE* fptr = fopen(Filename, "r");
int n=0; //number of rows
int poles=0;
int i=0; //for loop index
int scanreturn; //error check
scanreturn = fscanf(fptr, "%d", &n); // n will be the number of rows
poles = n*n - n;
int *array =malloc(sizeof(int)*(poles));
for(i=0;i<poles;i++)
{
scanreturn = fscanf(fptr, "%d", &array[i]);
if (scanreturn !=1)
{
printf("danger\n");
}
printf("%d: %d\n",i, array[i]);
}
printf("%d is n %d is poles\n",n, poles);
return array;
}
the output is :0: 1
1: 100
danger
2: 0
danger
3: 0
danger
4: 0
danger
5: 0
3 is n 6 is poles
我猜这些是字符而不是整数呢?
答案 0 :(得分:4)
1)确保正确的原型设计。从
开始#include <stdio.h>
#include <stdlib.h>
int* LoadConfig(char * Filename);
2)只读1位而不是无限制数字 - 这是你的主要问题
// scanreturn = fscanf(fptr, "%d", &array[i]);
scanreturn = fscanf(fptr, "%1d", &array[i]);
3)轻微:建议因为它更容易维护,更像是calloc()
。
// int *array =malloc(sizeof(int)*(poles));
int *array = malloc(poles * sizeof *array);
4)完成后,请务必在调用例程中释放array
。
free(array);
return 0;
5)检查fscanf()
结果
scanreturn = fscanf(fptr, "%d", &n);
if (scanreturn != 1) Oops();
6)推荐fgets()/sscanf() or strtox()
超过fscanf()