gpt4 book ai didi

c - 如何替换txt文件中的一行?

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

我有一个 .txt 文件,语法如下:

studentName1 grade1
studentName2 grade2
.
.
.

我想开发C函数int changeGrade(String name, int old_grade, int new_grade, String fileName)

这会用新学生更改指定学生的成绩。

#include <stdio.h>
#include <string.h>

typedef char String[30];

void changeGrade(String name, int old_grade, int new_grade, String fileName) {

long pos;
String temp;
int grade;
int test = 0;

if ((old_grade <= 10) && (old_grade >= 0)) {

FILE * fp = fopen(fileName, "r+");

while ((!test) && (!feof(fp))) {

pos = ftell(fp);

fscanf(fp, "%s %d\n", temp, & grade);
if (strcmp(name, temp) == 0 && grade == old_grade) {

fseek(fp, pos, SEEK_SET);
fprintf(fp, "%s %d", name, new_grade);
test = 1;

}
}
fclose(fp);
} else printf("Error,you must specify the grade");

}

int main(int argc,
const char * argv[]) {

changeGrade("Carl", 7, 6, "students.txt");

}

代码有效,但如果我有类似的东西changeGrade("Carl",10,7,"students.txt") 我明白

Carl 70

为什么?

最佳答案

尽管我不能容忍在 C 中这样做,也不能容忍您当前采用的方法,但简单的解决方法是确保所有成绩的宽度相同。如果您必须预处理文件以使所有内容均为 2 位数字,请使用以下命令执行此操作:awk '{$2 = sprintf("%2d",$2)}1' input-file

完成后,请始终使用 2 位数的成绩。即写:

fprintf(fp, "%s %2d", name, new_grade);

关于c - 如何替换txt文件中的一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57611957/

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