[英]Loading in C, integers and characters
我在加载此文件时遇到问题。
第一个数字是后续序列中将有多少个字符/数字。 我不知道/不知道如何弄清楚这些是数字还是字符。
这是我的代码:
文本文件是:
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
我猜那些是字符而不是整数吗?
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)在fscanf()
推荐fgets()/sscanf() or strtox()
fscanf()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.