我试图从具有逗号读取文件分隔值,像这样(第5场应该只有R/B/n和第6场Y/N:C语言编程的fscanf分割错误
531,A,10,10,b,n,96.00,100.00
531,B,15,15,b,n,144.00,0.00
531,C,20,20,b,n,192.00,0.00
533,A,11,11,r,n,123.20,100.00
533,B,22,22,r,n,246.40,0.00
我有以下的fscanf码块解析由线和存储值的文件中,我改变/输出以后的阵列。
while(fscanf(data, "%4[0-9],%[A-Z],%3[0-9],%3[0-9],[prb],[yn],%d,%d\n", &house[i], room[i], &length[i], &width[i], paintcode[i], ceilingcode[i], &cost[i], &setupcost[i]) != EOF) {
printf("%d,%c,%d,%d,%c,%c,%.2lf,%.2lf\n", &house[i], room[i], &length[i], &width[i], paintcode[i], ceilingcode[i], &cost[i], &setupcost[i]);
i++;
}
不幸的是,我得到一个分段故障和它发生在这条线。我已经改变并测试了大约一个小时,我很肯定我没有错,除非我错过了一些兴。任何帮助将不胜感激,完整的主要功能粘贴在下面。
main() {
FILE *data;
int house[200];
char room[200];
int length[200];
int width[200];
char paintcode[200];
char ceilingcode[200];
double cost[200];
double setupcost[200];
char line;
int MAX_BUFF = 200;
char x[200];
double price[100];
int i = 0, num_records = 0;
data = fopen("quotes.data","r");
if(data == NULL){
printf("Error: file can't be open..\n");
} else {
while(fscanf(data, "%4[0-9],%[A-Z],%3[0-9],%3[0-9],[prb],[yn],%d,%d\n", &house[i], room[i], &length[i], &width[i], paintcode[i], ceilingcode[i], &cost[i], &setupcost[i]) != EOF) {
printf("%d,%c,%d,%d,%c,%c,%.2lf,%.2lf\n", &house[i], room[i], &length[i], &width[i], paintcode[i], ceilingcode[i], &cost[i], &setupcost[i]);
i++;
}
fclose(data);
请至少写入C89,最好是C99--在上下文中,这意味着指定一个返回类型(main()为'int')和参数列表,并指向'int main(void)'。 –
请注意,您的循环将空间的第一个字符串放置在字符串中的偏移量0处;第二个字符串从房间数组中的偏移量1开始。您的打印(或多或少)与此保持一致,因此它可以正常工作,但是您逐渐将自己留在越来越少的空间来存放琴弦。阅读200个参赛作品,你到处乱涂乱画。 –