我正在读一本书,我无法弄清楚这是否尝试:(它是非英语的,所以我翻译了它)
编写一个程序,要求多个学生n,选择n个学生(以动态方式),名称为10个字符,并注明5个字符
从上面的选择中创建一个文本文件note.txt,并附加连字符以达到10个字符(对于名称)。
然后从中读取文件(仅),计算总数。然后显示注释不大于10的那些名称和注释。
您必须实现3个函数:createStudent,createFile和readFile,而不使用全局变量。
语法:name必须声明为char nom [10 + 1](即James,然后将添加5个连字符以获得10个字符)=>詹姆斯-----并注意:char [5 + 1](即15.00或07.50)
提示:要将笔记从文本格式转换为float,您可以使用atof函数
我创建了createStudent和createFile函数。它们运行良好,但我无法弄清楚最后一部分(readFile函数)。
我的文字文件有这样的形状:巴特------ 04.50丽莎------ 18.00荷马----- 03.00
void readFile(int n){
FILE* file = NULL;
double temp= 0.0, average= 0.0;
double *total = (double*)malloc(n*sizeof(double));
int position = 0;
char information[5+1]="";
file = fopen("c:\\myFile.txt","r");
fseek(file,10,SEEK_SET);
while(fgetc(file) != EOF)
{
fscanf(file,"%5s",&information);
temp = atof(information);
total[position]= temp;
position++;
fflush(stdin);
fseek(file,11,SEEK_CUR);
}
fclose(file);
for(int compteur=0;compteur<2;compteur++)
{
moyenne += totalNote[compteur];
}
它编译但不起作用,我无法弄清楚为什么:( 与java或c#
相比,我觉得C语言在这方面是如此痛苦 你可以给我一些灯吗?答案 0 :(得分:3)
您的输入文件看起来像包含“”形式的行。如果每行总是有固定数量的字符串/数字,您只需使用fscanf
(例如fscanf(file, "%*s %f %*s %f %*s %f", &number1, &number2, &number3);
)。
另一方面,如果每行可以有任意数量的字符串/数字对,则应该查看strtok
函数。
答案 1 :(得分:1)
您希望使用strtok_r(或strtok,如果strtok_r不可用)。然后,您可以将字符串转换为带空格分隔符的标记数组。然后,循环数组以转换和求和量应该是微不足道的。
答案 2 :(得分:1)
使用fscanf或fgets,strtok,atol(或sscanf)的组合来读取数字。