LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 894|回复: 3

这是我编的一个通讯录的一个框架,有点问题,各位帮忙扫一眼!谢谢~

[复制链接]
发表于 2005-9-22 15:22:26 | 显示全部楼层 |阅读模式
主要2个问题,一个是在输入Sex值得时候,不能输入,直接跳输入Birthday了。
另外一个是输入完所有的值后,应该后面打印那里,应该除了Sex,都能打印出来,但是Address也没有!怎么回事啊?帮忙解决,我是刚入门的,需要帮忙!呵呵~谢谢了!
      
      1 #include <stdio.h>
      2
      3 struct addr
      4 {
      5     char post_num[6];
      6     char addr[40];
      7 };
      8
      9 struct birth
     10 {
     11     int year;
     12     int month;
     13     int day;
     14 };
     15
     16 struct friend
     17 {
     18     int number;
     19     char name[20];
     20     char sex;
     21     struct birth birth;
     22     struct addr addr;
     23     char telephone[13];
     24 };
     25
     26 struct friend friend[50];
     27
     28 void Date_Input(int j)
     29 {
     30     friend[j].number=j;
     31     printf("No.:%d\n",j);
     32     printf("\nName:");
     33     scanf("%s",friend[j].name);
     34     printf("Sex(M/F):");
     35     scanf("%c",&friend[j].sex);
     36     printf("Birthday(Y-M-D):");
     37  scanf("%d-%d-%d",&friend[j].birth.year,&friend[j].birth.month,&friend[j].birth.day);      
     38     printf("Address:");
     39     scanf("%s",friend[j].addr.addr);
     40     printf("ost_Number:");
     41     scanf("%s",friend[j].addr.post_num);
     42     printf("Telephone:");
     43     scanf("%s",friend[j].telephone);
     44 }
     45
     46 int main()
     47 {
     48     Date_Input(1);
     49     printf("Name:%s\n",friend[1].name);
     50     printf("Sex:%c\n",friend[1].sex);
     51     printf("Birthday:%d-%d-%d\n",friend[1].birth.year,friend[1].birth.month,
     52                                  friend[1].birth.day);
     53     printf("Address:%s\n",friend[1].addr.addr);
     54     printf("ost_Number:%s\n",friend[1].addr.post_num);
     55     printf("Telephone:%s\n",friend[1].telephone);
     56 }
发表于 2005-9-23 19:13:11 | 显示全部楼层
35 行改为"scanf("\n%c",&friend[j].sex);"
原因不太清楚,但这样能 work
回复 支持 反对

使用道具 举报

发表于 2005-9-23 20:27:46 | 显示全部楼层
原因是
两个scanf,前一个scanf的输入时的换行会当作后一个scanf的输入,所以在输入name之后,sex接受到了换行值。
写一个接受输入的子程序,把换行过滤掉。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-23 22:23:53 | 显示全部楼层
谢谢楼上两位!
我也找到是这个原因了,无奈之下在33行后面加了个getchar()
我试试rickxbx这个方法行不行!呵呵~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表