标题:请大佬帮弟弟改改
只看楼主
无言之夏
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2023-3-22
结帖率:100%
已结贴  问题点数:20 回复次数:4 
请大佬帮弟弟改改
请大佬帮弟弟改改,数据修改之后在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是空的

搜索更多相关主题的帖子: number score copy char name 
2023-03-22 15:15
阳光上的桥
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:25
帖 子:82
专家分:525
注 册:2023-1-12
得分:10 
scanf输入字符串(%s)时候,变量的前面不需要&符号
2023-03-22 16:27
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
错误有很多,但根本性的是 看不懂你代码的逻辑呀!

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 给出的内容、代码对它们的运用 这三者都互相矛盾。
你还不如把原题发出来呐
2023-03-22 20:07
无言之夏
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2023-3-22
得分:0 
回复 2楼 阳光上的桥
谢谢大佬,但是我找到错误了,就是while 循环会多执行一次
2023-03-22 20:24
无言之夏
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2023-3-22
得分:0 
回复 3楼 rjsp
抱歉,抱歉,大佬,我自己又想了想,问题已经解决了
2023-03-22 20:26



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-511636-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020991 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved