2007
07-23

#include”stdio.h”


#define NUM 3


struct mem


{


    char name[20];


    char phone[10];


};


main()


{


    struct mem man[NUM];


    int i;


    for(i=0;i<NUM;i++)


     {


      printf(“input name:\n”);


      gets(man[i].name);


      printf(“input phone:\n”);


      gets(man[i].phone);


     }


    printf(“name\t\t\tphone\n\n”);


    for(i=0;i<NUM;i++)

      printf(“%s\t\t\t%s\n”,man[i].name,man[i].phone);

}


这个是谭浩强书里面的例子,我上机操作了几次,怎么总是第二个和第三个的姓名会出现两次,且电话号码缺一位,请大侠们指点!!!


新手在线等》有 4 条评论

  1. 5iluo 说:

    呵呵,,应该没有错吧,是不是你输入手机号码啊。你定义的最多能输入10个数字

  2. 5iluo 说:

    说错了,你最多只能输入9个数字。

    因为你定义的是字符数组,当你输入的字符小于字符数组的长度时,它默认在你输入的字符最后一个加入’\0′作为结束符。面结构体在内存里分配的空间是连续的,当你输入的字符大于你数组的长度时,函数输出时默认是遇到’\0′才结束,所以它会输出你下一个输入的姓名,

    比如:你输入
    小李
    12345678945
    小明
    12375

    在第一个电话号码后就没有了’\0′,它就连小明一起输出,

    这是我的理解,,等着高手指点

  3. kexinfans 说:

    对的,我也试了一遍
    定义电话号码的那个数组太小了,你输入手机号码时,就会把数组的最后以为’\0′给写成别的字符
    这样,这个字符数组就不是一个字符串了,
    puts() 函数输出时就不知道在哪停止,就会输出相邻的那个字符串,
    可能输出”小明”,也可能输出”小李” ,这就看编译器的了

  4. hualong0319 说:

    ,多谢高手们指教,小弟非常感谢!多谢大侠们!

留下一个回复