#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);}
这个是谭浩强书里面的例子,我上机操作了几次,怎么总是第二个和第三个的姓名会出现两次,且电话号码缺一位,请大侠们指点!!!
>> 本文固定链接: http://www.vcgood.com/archives/1746
>> 转载请注明: hualong0319 2007年07月23日 于 C语言帝国 发表
呵呵,,应该没有错吧,是不是你输入手机号码啊。你定义的最多能输入10个数字
说错了,你最多只能输入9个数字。
因为你定义的是字符数组,当你输入的字符小于字符数组的长度时,它默认在你输入的字符最后一个加入’\0′作为结束符。面结构体在内存里分配的空间是连续的,当你输入的字符大于你数组的长度时,函数输出时默认是遇到’\0′才结束,所以它会输出你下一个输入的姓名,
比如:你输入
小李
12345678945
小明
12375
在第一个电话号码后就没有了’\0′,它就连小明一起输出,
这是我的理解,,等着高手指点
对的,我也试了一遍
定义电话号码的那个数组太小了,你输入手机号码时,就会把数组的最后以为’\0′给写成别的字符
这样,这个字符数组就不是一个字符串了,
puts() 函数输出时就不知道在哪停止,就会输出相邻的那个字符串,
可能输出”小明”,也可能输出”小李” ,这就看编译器的了
,多谢高手们指教,小弟非常感谢!多谢大侠们!