gpt4 book ai didi

c - fscanf 只读取第一个字段 C

转载 作者:太空宇宙 更新时间:2023-11-04 03:33:50 25 4
gpt4 key购买 nike

我正在做一项作业,我必须创建一个成绩报告程序。一切正常,但最后一节让我更改代码,以便它从文件 (student.dat) 读取数据并将其用作输出数据。

student.dat样本(一共100行类似的)

Julius Hoffman,95,92,79,90,90
Dianne Conner,100,100,80,90,85
Mitchell Cooper,100,95,89,85,95

我的问题是 fscanf 命令,因为它只读取名字

示例输出(最终程序总共有 100 行)

Please enter a filename: student.dat
Student Name W(30%) Q(15%) T(20%) P(15%) E(20%) TOTAL(100%) GRADE

Julius Hoffman 0 0 0 0 0 0.00 F
0 0 0 0 0 0.00 F
0 0 0 0 0 0.00 F

处理文件读取的函数如下。

int read(char filename[], char name[][MAX_NAME_SIZE], float w[], float q[], float t[],float p[],float e[]){

int i =0;

FILE *fp = NULL;

fp = fopen(filename, "r");

if (fp != NULL) {

for(i=0; i < MAX_CLASS_SIZE; i++){

fscanf(fp, "%[^,]%[^,]%[^,]%[^,]%[^,]%[^,]", name[i], w[i], q[i], t[i], p[i], e[i]);

}
fclose(fp);
} else {
printf("Failed to open file\n");
}
return 0;
}

为了以防万一,这是处理向用户呈现报告的函数

void display( char name[][MAX_NAME_SIZE], float w[], float q[], float t[], float p[], float e[], float total[], char grade[][MAX_LETTER_SIZE] ) {

int i = 0;

printf("Student Name W(30%) Q(15%) T(20%) P(15%) E(20%) TOTAL(100%) GRADE\n===================================================================================\n");

for(i = 0; i < MAX_CLASS_SIZE; i++){
printf("%-15s %-3.0f %-3.0f %-3.0f %-3.0f %-3.0f %-3.2f %-15s\n", name[i], w[i], q[i], t[i], p[i], e[i], total[i], grade[i]);
}
}

如有任何建议,我们将不胜感激。

最佳答案

不匹配 scanf() 格式说明符。将 "%f"float *

一起使用

同时节省调试时间。只需将该行读入缓冲区,然后对其进行扫描。

"%n" 扫描空白,然后将扫描的索引保存到 n 中。所以如果 n > 0,代码知道扫描的整行。如果 buf[n],则扫描未在行尾完成。

for(i=0; i < MAX_CLASS_SIZE; i++) {
char buf[200];
if (fgets(buf, sizeof buf, fp) == NULL) break;

int n = 0;
sscanf(buf, fp, " %[^,],%f ,%f ,%f ,%f ,%f %n",
name[i], &w[i], &q[i], &t[i], &p[i], &e[i], &n);
if (n > 0) break; // format error
if (buf[n]) break; // extra text

// Use name[i], w[i], q[i], t[i], p[i], e[i]
}

关于c - fscanf 只读取第一个字段 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34098739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com