| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4632 人关注过本帖
标题:求助一个问题 如何选择修改结构体中的数据
只看楼主 加入收藏
fantasy89f
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2008-2-25
收藏
 问题点数:0 回复次数:17 
求助一个问题 如何选择修改结构体中的数据
void rewrite()
{
    int i;
    char id[10];
    printf("\n\t\t请输入要修改的学生学号:");
    scanf("%s",id);
    for(i=0;i<num;i++)
    {
         if(strcmp(student[i].id,id)==0)
         {
            printf("\n\t\t以下是您要修改的学生纪录:");
            printf("\n\t\t________________________________");
            printf("\n\t\t学号:  %s",student[i].id);
            printf("\n\t\t姓名:  %s",student[i].name);
            printf("\n\t\t电话:  %s",student[i].phone);
            printf("\n\t\t地址:  %s",student[i].adress);
            printf("\n\t\t邮编:  %s",student[i].postcode);
            printf("\n\t\te-mail:%s",student[i].e_mail);
            printf("\n\t\t________________________________");
            printf("\n\t\t请输入修改后的学生信息:");
            printf("\n\t\t输入姓名:");
            scanf("%s",&student[i].name);
            printf("\n\t\t输入电话号码:");
            scanf("%s",&student[i].phone);
            printf("\n\t\t输入地址:");
            scanf("%s",&student[i].adress);
            printf("\n\t\t输入邮编:");
            scanf("%s",&student[i].postcode);
            printf("\n\t\t输入e-mail:");
            scanf("%s",&student[i].e_mail);
            printf("\n\t\t是否继续修改?(Y/N):");
            if (getch()=='y')
                rewrite();
            return;
         }
    }
    printf("\n\t\t没有改学生的信息");
    printf("\n\t\t按任意键返回主菜单");
    getch();
    return;
}

这是我原来的代码,但是这样写就必须把所有的信息都改掉,如果我只选择其中一项修改应该怎么办??
谢谢
搜索更多相关主题的帖子: 结构体 数据 选择 
2008-03-07 16:59
zhao8882407
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2008-1-10
收藏
得分:0 
加开关就好
比如说只想修改姓名
#ifdef   ONLYMODIFYNAME
            printf("\n\t\t输入姓名:");
            scanf("%s",&student[i].name);
#else
            printf("\n\t\t输入电话号码:");
            scanf("%s",&student[i].phone);
            printf("\n\t\t输入地址:");
            scanf("%s",&student[i].adress);
            printf("\n\t\t输入邮编:");
            scanf("%s",&student[i].postcode);
            printf("\n\t\t输入e-mail:");
            scanf("%s",&student[i].e_mail);
#endif
2008-03-07 17:18
Love嵌入式
Rank: 1
等 级:新手上路
帖 子:84
专家分:0
注 册:2008-3-4
收藏
得分:0 
xiugai(struct stu *head)    /*修改数据*/
{
  int i=0;
  int n;
  char c;
  char num[20];
  struct stu *p=head,*r;
  clrscr();
 while(1)
 {
   clrscr();
   daying(head);
   printf("\t\t\tPlease input the num you want to amend:");
   scanf("%s",num);
   p=head;
   while(p->next!=NULL)
   {
    if((strcmp(p->xuehao,num))==0) break;
    p=p->next;
    i++;
    }
   if((strcmp(p->xuehao,num))!=0)
    {
      printf("\n\t\t\tThe number is not in!\n");
      continue;
     }
 else
 {
  while(1)
  {
    printf("\n\t\t\t0:Exit\n");
    printf("\n\t\t\t1:Amend Name\n");
    printf("\n\t\t\t2:Amend Number\n");
    printf("\n\t\t\t3:Amend Specialty\n");
    printf("\n\t\t\t4:Amend Grade\n");
    printf("\n\t\t\t5:Amend Class\n");
    printf("\n\t\t\t6:Amend Building\n");
    printf("\n\t\t\t7:Amend Floor\n");
    printf("\n\t\t\t8:Amend Dorm\n");
    printf("\n\t\t\t9:Amend Age\n");
    printf("\n\t\t\t10:Amend Sex\n");
    printf("\n\t\t\tPlease choise:");scanf("%d",&n);
    switch(n)
    {
      case 0:break;
      case 1:printf("\n\t\t\tName:");     scanf("%s",p->name);break;
      case 2:printf("\n\t\t\tNumber:");   scanf("%s",p->xuehao);break;
      case 3:printf("\n\t\t\tSpecialty:");scanf("%s",p->zhuanye);break;
      case 4:printf("\n\t\t\tGrade:");    scanf("%s",p->nianji); break;
      case 5:printf("\n\t\t\tClass");     scanf("%s",p->inclass);break;
      case 6:printf("\n\t\t\tBuilding:"); scanf("%s",p->louhao); break;
      case 7:printf("\n\t\t\tFloor:");    scanf("%s",p->lou);  break;
      case 8:printf("\n\t\t\tDorm:");     scanf("%s",p->sushe);break;
      case 9:printf("\n\t\t\tAge:");      scanf("%s",p->age); break;
      case 10:printf("\n\t\t\tSex:");      scanf("%s",p->sex); break;
      default:printf("\n\t\t\tError!\n");break;
     }
    printf("\n\t\t\tDo you go on to amend?(Y||N)\n");c=getch();
    if(c=='Y'||c=='y'){clrscr(); continue;}
    else break;
   }
  break;
  }
 }
  
}
2008-03-07 17:21
fantasy89f
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2008-2-25
收藏
得分:0 
看不太明白,自己再研究下,谢谢帮助
2008-03-07 17:27
fantasy89f
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2008-2-25
收藏
得分:0 
这是我改的,大家帮我看下,为什么通过不了

void rewrite()
{
    int i;
    char id[10];
    char *name,*phone,*adress,*postcode,*e_mail;
    printf("\n\t\t请输入要修改的学生学号:");
    scanf("%s",id);
    for(i=0;i<num;i++)
    {
         if(strcmp(student[i].id,id)==0)
         {
            char *name,*phone,*adress,*postcode,*e_mail;
            printf("\n\t\t以下是您要修改的学生纪录:");
            printf("\n\t\t________________________________");
            printf("\n\t\t学号:  %s",student[i].id);
            printf("\n\t\t姓名:  %s",student[i].name);
            printf("\n\t\t电话:  %s",student[i].phone);
            printf("\n\t\t地址:  %s",student[i].adress);
            printf("\n\t\t邮编:  %s",student[i].postcode);
            printf("\n\t\te-mail:%s",student[i].e_mail);
            printf("\n\t\t________________________________");
            printf("\n\t\t请输入修改后的学生信息:");
            printf("\n\t\t输入姓名:");
            scanf("%s",name);
            if(name!='\0')
                strcpy(student[i].name=name);
            printf("\n\t\t输入电话号码:");
            scanf("%s",phone);
            if(phone!='\0')
                student[i].phone=phone;
            printf("\n\t\t输入地址:");
            scanf("%s",adress);
            if(adress!='\0')
                student[i].adress=adress;
            printf("\n\t\t输入邮编:");
            scanf("%s",postcode);
            if(postcode!='\0')
                student[i].postcode=postcode;
            printf("\n\t\t输入e-mail:");
            scanf("%s",e_mail);
            if(e_mail!='\0')
                student[i].e_mail=e_mail;
            printf("\n\t\t是否继续修改?(Y/N):");
            if (getch()=='y')
                rewrite();
            return;
         }
    }
    printf("\n\t\t没有该学生的信息");
    printf("\n\t\t按任意键返回主菜单");
    getch();
    return;
}
2008-03-07 17:46
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
#include"stdio.h"
#include"string.h"
void rewrite()
{
    int i;
    char id[10];
    int num,mark1=0,mark2=1;
    printf("\n\t\t请输入要修改的学生学号:");
    scanf("%s",id);
    for(i=0;i<num;i++)
    {
         if(strcmp(student[i].id,id)==0)
         {  mark=1;
            printf("\n\t\t以下是您要修改的学生纪录:");
            printf("\n\t\t________________________________");
            printf("\n\t\t1.学号:  %s",student[i].id);
            printf("\n\t\t2.姓名:  %s",student[i].name);
            printf("\n\t\t3.电话:  %s",student[i].phone);
            printf("\n\t\t4.地址:  %s",student[i].adress);
            printf("\n\t\t5.邮编:  %s",student[i].postcode);
            printf("\n\t\t6.e-mail:%s",student[i].e_mail);
            printf("\n\t\t________________________________");
            printf("\n\t\t输入\t1\t修改姓名:");
            printf("\n\t\t输入\t2\t修改电话:");
            printf("\n\t\t输入\t3\t修改地址:");
            printf("\n\t\t输入\t4\t修改邮编:");
            printf("\n\t\t输入\t5\t修改e-mail:");
            printf("\n\t\t输入\t6\t修全部修改:");
            scanf("%d",&num);
            if(num==6)mark2=0;
            switch(num)
            {
            case 1:                
                    printf("\n\t\t输入姓名:");
                    scanf("%s",&student[i].name);
                if(mark2)
                {
                    break;
                }
            case 2:
                printf("\n\t\t输入电话号码:");
                scanf("%s",&student[i].phone);
            if(mark2)
                {
                    break;
                }
            case 3:
                printf("\n\t\t输入地址:");
                scanf("%s",&student[i].adress);
                if(mark2)
                {
                    break;
                }
            case 4:
                printf("\n\t\t输入邮编:");
                scanf("%s",&student[i].postcode);
            if(mark2)
                {
                    break;
                }
            case 5:
                printf("\n\t\t输入e-mail:");
                scanf("%s",&student[i].e_mail);
            if(mark2)
                {
                    break;
                }
                        
            }
        
    }

        if(mark==1)
            {
                printf("\n\t\t是否继续修改?(Y/N):");
                if (getch()=='y')
                rewrite();
                return;
            }
        else{
            printf("\n\t\t没有改学生的信息");
            printf("\n\t\t按任意键返回主菜单");
            getch();
            return;
        }
}

学习需要安静。。海盗要重新来过。。
2008-03-07 18:27
fantasy89f
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2008-2-25
收藏
得分:0 
用switch写没问题可是用的时候显得太烦琐啊,我想可不可以判断输入的是不是enter,如果是则不保存,如果不是,则把输入的信息放到结构体数组中去,但是strcpy(student[i].name=name);这一句编译时worning,谁解释一下呀,谢谢
2008-03-08 09:52
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
你得name是多大的数组啊?如果长度不够会出错

学习需要安静。。海盗要重新来过。。
2008-03-08 09:55
fantasy89f
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2008-2-25
收藏
得分:0 
name[20],应该不是长度的问题吧,编译都通过不了
2008-03-08 10:03
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
#include<stdio.h>
#include<string.h>
typedef struct
{
    char name[200];
}st;
void main()
{
    char name[200];
    st student;
    gets(name);
    strcpy(student.name,name);
    puts(student.name);
}

学习需要安静。。海盗要重新来过。。
2008-03-08 10:12
快速回复:求助一个问题 如何选择修改结构体中的数据
数据加载中...
 
   



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

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