例如,我有一个包含所有整数的txt文件。我想计算有多少整数来分配一个数组。
int array[0];
int count = 0;
FILE *file = fopen("file1.txt","r");
while(fscanf(file,"%d",&array[count])==1){
count++;
}
printf("%d",count);
目前有错误消息,不会通过。这是fscanf的工作方式吗?
答案 0 :(得分:2)
您无法创建大小为0的数组。如果您只想计算整数的数量,请不要使用数组,而只能使用临时变量。 最好检查一下您是否正确打开文件并关闭文件。
#include <stdio.h>
int main(){
int temp;
int count = 0;
FILE *file = fopen("file1.txt","r");
if(file == NULL){
printf("Could not open specified file");
return -1;
}
while(fscanf(file,"%d",&temp)==1){
count++;
}
fclose(file);
printf("%d",count);
}
return 0;
}
如果您还想存储值供以后使用,您可以例如读取文件两次,第一次计算整数的数量,然后使用此数量来声明所需的数组。在第二次运行之前,重要的是回放文件指针,从头开始读取文件。
#include <stdio.h>
int main(){
int temp;
int count = 0;
FILE *file = fopen("file1.txt","r");
if(file == NULL){
printf("Could not open specified file");
return -1;
}
while(fscanf(file,"%d",&temp)==1){
count++;
}
printf("%d",count);
if(count == 0){ //do not create array of size 0
fclose(file);
}
else{
//second run
int array[count];
rewind(file);
for(int i=0; i<count; i++){
fscanf(file,"%d",&array[count]);
}
fclose(file);
//continue using array...
}
return 0;
}
答案 1 :(得分:0)
int array[0];
和
fscanf(file,"%d",&array[count])
会导致分段错误,因为您正在越过边界访问数组。
如果您需要灵活的阵列,则需要
int *array
fscanf
realloc
数组并将数字添加到数组中。答案 2 :(得分:0)
#include <stdio.h>
#define isDigit(c) ('0' <= (c) && (c) <= '9') ? 1 : 0
int main() {
FILE *fd;
int counter, c, tmp;
if ((fd = fopen("PathToFile", "r")) != NULL){
do{
c = getc(fd);
if (isDigit(c)) tmp = 1;
else if (tmp == 1 && !isDigit(c)){
counter++, tmp = 0;
}
}while (c != EOF);
}else{
printf("Couldn't find File!");
return 1;
}
fclose(fd);
printf("%i", counter);
return 0;
}