gpt4 book ai didi

c - 结构的 getdata 函数未读取所有数据

转载 作者:行者123 更新时间:2023-11-30 18:01:30 25 4
gpt4 key购买 nike

#include <stdio.h>
#include <stdlib.h>

#define MAX 20
#define MAX_BASE 8
#define ROW 9
#define COLUMN_SCORE 12
#define MAX_SKATER 4

typedef struct{
char name[MAX];
int elements;
float baseval[MAX_BASE];
int score[12][MAX_BASE];
double total_score;
}SKATER;

int getData(SKATER skater[MAX]);
//void calcData(SKATER skater[MAX]);


int main (void)
{
// Global Declarations
SKATER skater[MAX_SKATER];
int num;

// Function calls
num = getData(skater);
//calcData(skater);
return 0;
}

/********************************* getData ************************************
Pre:
Post:
*/
int getData(SKATER skater[MAX_SKATER])
{
// LOcal Declarations
FILE* fpIn;
int i = 0;
int k;
int j;
char buffer[100];

// Statements
if((fpIn = fopen("lab6data.txt","r"))==NULL)
{
printf("File opening error");
system("PAUSE");
exit(100);
}

while(i < MAX_SKATER && fgets(buffer, 100, fpIn))
{
sscanf(buffer,"%*c%19[^0123456789]", skater[i].name);
puts(buffer);
for(k = 0; k < MAX_BASE; k++)
{
sscanf(buffer,"%d %f", &skater[i].elements, skater[i].baseval);
for(j = 0; j < COLUMN_SCORE; j++)
{
sscanf(buffer,"%d", &skater[i].score[k][j]);
}
}

i++;
}
system("PAUSE");
fclose(fpIn);
return i;
}

这个getdata函数是从文件中读取数据到结构数组中。第一行包含名称,下一行包含元素编号基值,其余数字是分数,这会重复8次。当我尝试 put(buffer) 时,getdata 函数仅读取前 3 行数据,包括名称 2 行,为什么我会遇到这个问题,谁能告诉我如何解决它?我有逻辑错误吗?

这是数据:

MENS SHORT PROGRAM//http://www.isufs.org/results/owg2006/OWG06_Men_SP_Scores.pdf
LYSACEK Evan
1 7.5 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3
2 10.0 1 2 2 1 1 1 1 2 0 1 1 1
3 3.0 1 2 2 2 1 0 1 2 1 1 1 2
4 3.1 1 1 1 1 1 0 0 0 1 0 1 0
5 1.7-3 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3
6 2.1 0 0 1 1 1 1 1 1 1 1 1 1
7 3.1 0 0 1 1 0 0 1 1 1 1 1 1
8 3.5 0 1 1 2 1 1 1 1 1 1 0 1
WEIR Johnny
1 7.5 2 2 2 2 1 1 1 1 1 2 1 1
2 10.0 1 1 1 1 2 0 1 1 1 1 2 1
3 3.0 1 1 1 2 1 0 1 1 2 2 2 2
4 3.1 1 2 1 2 1 1 0 0 2 1 1 0
5 5.5 0 -1 0 -1 -1 0 -1 -1 1 -2 -2 -2
6 1.3 1 1 1 2 1 1 1 0 1 1 1 2
7 3.1 0 1 1 1 1 0 0 1 2 1 1 1
8 3.0 -1 1 1 2 1 0 1 0 2 1 -1 1
PLUSHENKO Evgeni
1 13.0 0 2 1 1 1 0 1 0 1 1 1 1
2 7.5 1 2 2 2 2 1 2 1 2 2 2 2
3 6.0 2 1 1 1 1 0 0 2 1 2 1 2
4 2.3 2 1 1 1 1 1 2 1 1 1 1 1
5 3.4 2 2 2 2 1 2 3 3 2 3 2 1
6 2.1 1 1 1 2 2 0 0 0 1 2 1 1
7 3.1 1 0 2 2 1 1 1 2 2 2 2 1
8 3.5 1 1 2 2 1 1 1 1 2 2 1 1
SAVOIE Matthew
1 3.0 0 0 0 1 0 0 0 0 0 0 0 -1
2 7.5 1 2 2 1 1 1 1 1 1 1 2 2
3 9.5 0 1 1 0 0 0 0 0 0 0 1 1
4 3.1 1 1 1 1 1 1 0 0 1 1 0 0
5 1.9 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3
6 2.1 0 0 1 0 1 0 0 1 1 1 1 1
7 3.1 0 0 1 0 0 0 1 1 2 0 2 1
8 3.0 0 0 1 1 1 0 1 1 1 1 1 1

最佳答案

由于这是作业,我只会给你一些关于你出错的地方的提示。我希望这能让您回到正轨! :)

  1. 您提到您只阅读了有限的行数。您应该查看循环条件“while(i < MAX_SKATER && fgets(”),以了解为什么它只打印几行。

  2. 我会给你这个,因为你才刚刚开始。在读取分数行的 sscanf 调用中,每个参数都必须作为指针传递。您传入以接收数据的第二个变量未正确传递。而是使用“&skater[i].baseval”。您的玩家名称 sscanf 也是如此。

  3. 您将需要再次调用 fgets,可能是在“for(k”循环中。正如您所知道的,您只是尝试读取标题行。然后您将重新使用相同的缓冲区数据(标题行)尝试解析分数线时。

  4. 您需要在“for(j”循环中分离 sscanf,从而在“for(k”循环中产生一个新的 sscanf)。您必须分别读取玩家编号和 Baseval分数,因为您要读取的分数数量不定 (COLUMN_SCORE)。

关于c - 结构的 getdata 函数未读取所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9798906/

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