我被要求创建一个包含以下格式的行的文本文件。每种类型的信息(或字段)必须用空格分隔,每行必须以换行符结尾:
Category1 LabelA 0.32 10 0.60 8
Category1 LabelX 0.24 12 0.90 4
Category2 LabelZ 0.55 14 1.50 10
我被要求通读并使用带指针的函数来计算每个类别的整数以及所有类别的总计算。我有两个问题。
答案 0 :(得分:0)
逻辑:
!feof(FILE)
fgets()
1行sscanf()
行可以优化以下代码以减少对函数的调用,但为了清晰表达,我创建了多个函数..每个函数只执行1个作业:
#include <stdio.h>
#include <string.h>
void get_data(const char *ptr, char *category, char *label, float *f1,
int *fint, float *f2, int *sint) //fint = first-int, sint is second int
{
sscanf(ptr,"%s%s%f%d%f%d\n", category, label, f1, fint, f2, sint);
}
const char *get_line(FILE *f, char *target, size_t size)
{
fgets(target, size, f);
}
double random_calculation(float f1, int fint, float f2, int sint)
{
return f1 * fint + f2 * sint;
}
int main(int argc, char *argv[])
{
char buffer[512];
char label[50], category[50];
FILE *file;
float f1, f2;
int fint,sint;
double answer;
if(argc != 2) { puts("No file!"); return 0;}
file = fopen(argv[1], "r");//open in text mode
if(!file) return;
while(!feof(file)) {
get_line(file, buffer, 511);
puts(buffer);
get_data(buffer, category, label,&f1,&fint, &f2, &sint);
answer = random_calculation(f1, fint, f2, sint);
printf(">>> %s %s: %lf\n\n", category, label, answer);
}
return 0;
}