[英]Read from txt file and input to an array in C
我有我的txt文件
4
110
220
112
335
4是行数和4 * 3的int数。 我必须读“4”然后读取剩余的并将它们输入到数组中
这就是我所拥有的
void main(){
int a,n;
int i=0,j=0,k[30]; //
int *N;
FILE *fp = fopen("test.txt", "r");
if(fscanf(fp, "%d", &a) != 1) { //
// something's wrong
}
n=3*a; //3*a numbers in the file
N = malloc(3 * a * sizeof(int));
for(i = 0; i <n;++i) {
int result=fscanf(fp, "%d", &N[i] );
}
fclose(fp);
for(j=0;j<3*a;j++){
k[j]=N[j];
}
printf("%d",k[0]);
}
当我打印k[0]
它应该打印“1”,而是打印整行“110”
还有其他办法吗?
格式说明符%d
没有指定长度,因此fscanf
将读取尽可能多的数字; 这就是为什么你得到110而不是1。
如果您指定一个长度,例如%1d
,它将只读取您告诉它的数字:
for(i = 0; i <n;++i) {
int result=fscanf(fp, "%1d", &N[i] );
}
当您使用带有%d格式参数的fscanf时,它会从文件中检索整数类型。 由于110和其他都是整数,它将直接从文件中获取110。
所以你可以在一个循环中使用带有%d参数的fscanf进行迭代一次,或者如果你想逐个字符地获取它,你可以使用带有%c参数的fscanf,但它需要更多的努力。 因此,您应该将fscanf与%d参数一起使用,并为每个数字循环获取所有数字。
fscanf(fp, "%d", &N[i] )
将捕获一个数字而不是一个数字。 所以
fscanf(fp, "%d", &N[0] ) //will catch 110
fscanf(fp, "%d", &N[1] ) //will catch 220
...
如果要捕获数组中的数字,则必须使用以下代码:
for(i = 0; i <n;++i) {
int result=fscanf(fp, "%c", &N[i] );
if (isdigit (N[i])) N[i]-='0';
else i--;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.