用C语言编写程序: 从与源文件相同路径下的grade.in文件中读取数据,该数据为若干学生的学号和成绩,将成绩在80分段(大于等于80而小于90)的学生的学号和相应的成绩以相同的格式打印到与源程序相同路径的grade.out文件中。 grade.in文件格式非常简单,一个合法的输入文件如下: {"id":202101,"grade":90} {"id":202102,"grade":85} 每行只包含一名学生的信息,中间没有空格。 输出格式与输入文件相同,如 {"id":202102,"grade":85} 如有多名学生,则输出多行,每行输出一个学生的信息。
时间: 2023-07-19 08:16:11 浏览: 260
好的,下面是一个用C语言实现的程序,可以实现你的需求:
```c
#include <stdio.h>
int main() {
FILE *f_in, *f_out;
char buffer[100];
// 打开输入文件
f_in = fopen("grade.in", "r");
if (f_in == NULL) {
printf("无法打开输入文件\n");
return 1;
}
// 打开输出文件
f_out = fopen("grade.out", "w");
if (f_out == NULL) {
printf("无法打开输出文件\n");
return 1;
}
// 逐行读取输入文件
while (fgets(buffer, 100, f_in) != NULL) {
int id, grade;
// 解析每行数据
if (sscanf(buffer, "{\"id\":%d,\"grade\":%d}", &id, &grade) == 2) {
// 如果成绩在80分段
if (80 <= grade && grade < 90) {
// 将学号和成绩写入输出文件
fprintf(f_out, "{\"id\":%d,\"grade\":%d}\n", id, grade);
}
}
}
// 关闭文件
fclose(f_in);
fclose(f_out);
return 0;
}
```
这段代码会打开与源文件相同路径下的`grade.in`文件进行读取,并将符合要求的学号和成绩以相同的格式写入到与源程序相同路径的`grade.out`文件中。
需要注意的是,这段代码假设输入文件中每行数据都是以JSON格式表示的,包含两个字段:`id`表示学号,`grade`表示成绩。如果你的输入文件格式不同,需要适当修改代码以适应你的需求。另外,这段代码使用了`fgets()`函数逐行读取输入文件,并使用`sscanf()`函数解析每行数据。这两个函数对输入数据的格式有一定的要求,你需要确保输入文件的格式与代码中的要求一致。
阅读全文