【发布时间】:2019-03-22 14:09:09
【问题描述】:
我正在尝试读取包含逗号操作的数字的文件,并将它们存储在不存在逗号的数组中。
例如:processes.txt 包含
0,1,3
1,0,5
2,9,8
3,10,6
一个叫做 numbers 的数组应该是这样的:
0 1 3 1 0 5 2 9 8 3 10 6
到目前为止我的代码是:
FILE *fp1;
char c; //declaration of characters
fp1=fopen(argv[1],"r"); //opening the file
int list[300];
c=fgetc(fp1); //taking character from fp1 pointer or file
int i=0,number,num=0;
while(c!=EOF){ //iterate until end of file
if (isdigit(c)){ //if it is digit
sscanf(&c,"%d",&number); //changing character to number (c)
num=(num*10)+number;
}
else if (c==',' || c=='\n') { //if it is new line or ,then it will store the number in list
list[i]=num;
num=0;
i++;
}
c=fgetc(fp1);
}
但如果是两位数,就会出现问题。有没有人有更好的解决方案?谢谢!
【问题讨论】:
-
请注意
fgetc返回一个int。这实际上对您的EOF支票非常重要。 -
将
c更改为int,否则while(c!=EOF)将不起作用。sscanf(&c,"%d",&number);应该是number = c - '0';。 -
另外请注意
&c不是以空值结尾的字符串。您不能这样使用它(例如作为sscanf中的来源)。 -
一个非常常见的错误。它必须是一个 int,否则 EOF 必须在 0 到 255 的范围内,这些都是有效的 char 值。
标签: c