注册 登录
编程论坛 C语言论坛

请大佬帮弟弟改改

无言之夏 发布于 2023-03-22 15:15, 854 次点击
请大佬帮弟弟改改,数据修改之后在score中多了一组信息“ddd 60”
两名同学分别是,zhangsan,lisi 学科是aaa ,bbb,ccc,ddd,学科后面的是分数
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    int i=0;
    char subject[50];
    char a[50];
    char name[50];
    struct stu {
        char name[50];
        char number[10];
        char subject[50];
        char score[3];
        char score3[3];
    };
   
        struct stu stum;   
        struct stu copy;
        
        
        FILE *fp;
        FILE *fp1;
        
        fp = NULL;
        fp1 = NULL;
        
        fp=fopen("score.txt","r+");
        fp1=fopen("score1.txt","r+");
        printf("请输入您所修改成绩学生的名字:");
        scanf("%s",&name);
        printf("请输入您所修改成绩学生的科目:");
        scanf("%s",&subject);
        while(feof(fp)==0)
        {        
            fscanf(fp,"%s %s",&stum.name,&stum.number);
            strcpy(copy.name,stum.name);
            strcpy(copy.number,stum.number);
            fprintf(fp1,"%s %s ",copy.name,copy.number);
            if(strcmp(name,stum.name)==0)
            {
                //fprintf(fp1," %s %s ",stum.name,stum.number);
                fscanf(fp," %s %s",&stum.subject,&stum.score);
                strcpy(copy.subject,subject);
                if(strcmp(subject,stum.subject)==0)
                {
                    printf("您要将该同学的%s分数改为:",copy.subject);
                    scanf("%s",&copy.score);   
                    fprintf(fp1,"%s %s ",copy.subject,copy.score);                    
                }
            }
        }
        //fseek(fp,5,2);
        
//rewind(fp);
        
//rewind(fp1);
        fclose(fp);
        fclose(fp1);
        fp=fopen("score.txt","w");
        fp1=fopen("score1.txt","r+");
        while(feof(fp1)==0)
        {
            fscanf(fp1,"%s %s",&stum.name,&stum.number);
            strcpy(copy.name,stum.name);
            strcpy(copy.number,stum.number);
            fprintf(fp,"%s %s ",copy.name,copy.number);
        }
        fclose(fp);
        fclose(fp1);
        return 0;
}







score.txt
内容:zhangsan 111 aaa 60 bbb 60
lisi 222 ccc 60 ddd 60

score.txt是空的

4 回复
#2
阳光上的桥2023-03-22 16:27
scanf输入字符串(%s)时候,变量的前面不需要&符号
#3
rjsp2023-03-22 20:07
错误有很多,但根本性的是 看不懂你代码的逻辑呀!

zhangsan 111 aaa 60 bbb 60 中 zhangsan 是 name,111 是 number。
aaa 是 subject 吗?那么 bbb 60 是什么?score[0]、score[1]、score[2]、score3[0]、score3[1]、score3[2] 分别又是什么数据?

如果 if(strcmp(name,stum.name)==0) 不成立的话就如代码所言,只留 name 和 number 这两项吗?
那成立时会保留 name、number 、subject、score 这四项。数据参差不齐的,最后一步怎么却又当成都必须是 4 项?

总之,你 struct stu 定义的字段、score.txt 给出的内容、代码对它们的运用 这三者都互相矛盾。
你还不如把原题发出来呐
#4
无言之夏2023-03-22 20:24
回复 2楼 阳光上的桥
谢谢大佬,但是我找到错误了,就是while 循环会多执行一次
#5
无言之夏2023-03-22 20:26
回复 3楼 rjsp
抱歉,抱歉,大佬,我自己又想了想,问题已经解决了
1