免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2412 | 回复: 10

printf 的一个小程序,请高手解惑. [复制链接]

论坛徽章:
0
发表于 2007-07-23 15:55 |显示全部楼层
程序如下:

#include <stdio.h>

struct entry{
       char fname[20];
       char lname[20];
       char phone[10];};
struct entry list[4];
   int i;

int main(void)
{
  for(i=0; i<4; i++)
   {
     printf("\n Enter first name: ");
     scanf("%s",&list[ i ].fname);
     printf("\n Enter last name: ");
     scanf("%s",&list[ i ].lname);
     printf("\n Enter phone in 010-88888888 format: ");
     scanf("%s",&list[ i ].phone);
   }
  printf("\n\n========================================================\n");

  for(i=0; i<4; i++)
    {
      printf("NAME: %s %s", list[ i ].lname, list[ i ].fname);
      printf("\t\tPHONE: %s \n",list[ i ].phone);
    }
  return 0;
}


打印结果如下:
========================================================
NAME: liu shao          PHONE: 010-634343fang
NAME: lv fang           PHONE: 024-21322
NAME: lin ying          PHONE: 0736-23232ruihua
NAME: zhang ruihua              PHONE: 0416-23232

用gdb,  一步一步的跟踪程序,没有发现list.phone 变量有异常啊,怎么打印时把下一数组的名字加到PHONE里打印出来了呢?

[ 本帖最后由 gogaga 于 2007-7-23 16:20 编辑 ]

论坛徽章:
0
发表于 2007-07-23 16:00 |显示全部楼层
程序中

  1. list.->list[i].
复制代码

[ 本帖最后由 ivhb 于 2007-7-23 16:11 编辑 ]

论坛徽章:
0
发表于 2007-07-23 16:01 |显示全部楼层
楼上的,我没懂啊.

论坛徽章:
0
发表于 2007-07-23 16:09 |显示全部楼层
能啊,我都执行出结果了啊. <21天学会C语言>里面的例子啊.

论坛徽章:
0
发表于 2007-07-23 16:13 |显示全部楼层
原帖由 gogaga 于 2007-7-23 16:01 发表
楼上的,我没懂啊.



呵呵,没有想到【i】显示不了

论坛徽章:
0
发表于 2007-07-23 16:19 |显示全部楼层
对啊,怎么这里 [ i ]    显示不了呢?    我又把源程序重新编辑了一下.

[ 本帖最后由 gogaga 于 2007-7-23 16:21 编辑 ]

论坛徽章:
0
发表于 2007-07-23 16:42 |显示全部楼层
改了还有问题?

论坛徽章:
0
发表于 2007-07-23 16:50 |显示全部楼层
当然有问题,我程序写的是对的,就是打印出来的list[ i ].phone   有问题啊,跟踪了半天了,没发现怎么回事,电话号码非要带半个名字出来.

论坛徽章:
0
发表于 2007-07-23 16:52 |显示全部楼层
struct entry{
       char fname[20];
       char lname[20];
       char phone[10]; };

问题应该出在phone成员的定义上,
10个元素相对于你的输入来说太短了,
多出的写入了下一个变量的fname成员中,
而你在输入下一个变量的成员时又把多
出的那部分覆盖了,结果输出就乱了
你把phone长度加大试一下吧

论坛徽章:
0
发表于 2007-07-23 17:03 |显示全部楼层
楼上的,果真是如此,我把长度加到100,就没有输出问题了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP