Chinaunix

标题: printf 的一个小程序,请高手解惑. [打印本页]

作者: gogaga    时间: 2007-07-23 15:55
标题: printf 的一个小程序,请高手解惑.
程序如下:

#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 编辑 ]
作者: ivhb    时间: 2007-07-23 16:00
程序中

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

[ 本帖最后由 ivhb 于 2007-7-23 16:11 编辑 ]
作者: gogaga    时间: 2007-07-23 16:01
楼上的,我没懂啊.
作者: gogaga    时间: 2007-07-23 16:09
能啊,我都执行出结果了啊. <21天学会C语言>里面的例子啊.
作者: ivhb    时间: 2007-07-23 16:13
原帖由 gogaga 于 2007-7-23 16:01 发表
楼上的,我没懂啊.



呵呵,没有想到【i】显示不了
作者: gogaga    时间: 2007-07-23 16:19
对啊,怎么这里 [ i ]    显示不了呢?    我又把源程序重新编辑了一下.

[ 本帖最后由 gogaga 于 2007-7-23 16:21 编辑 ]
作者: ivhb    时间: 2007-07-23 16:42
改了还有问题?
作者: gogaga    时间: 2007-07-23 16:50
当然有问题,我程序写的是对的,就是打印出来的list[ i ].phone   有问题啊,跟踪了半天了,没发现怎么回事,电话号码非要带半个名字出来.
作者: PiscesSTAR    时间: 2007-07-23 16:52
struct entry{
       char fname[20];
       char lname[20];
       char phone[10]; };

问题应该出在phone成员的定义上,
10个元素相对于你的输入来说太短了,
多出的写入了下一个变量的fname成员中,
而你在输入下一个变量的成员时又把多
出的那部分覆盖了,结果输出就乱了
你把phone长度加大试一下吧
作者: gogaga    时间: 2007-07-23 17:03
楼上的,果真是如此,我把长度加到100,就没有输出问题了.
作者: zwylinux    时间: 2007-07-23 17:15

  1.      printf("\n Enter first name: ");
  2.      scanf("%s",&list[ i ].fname);
  3.      printf("\n Enter last name: ");
  4.      scanf("%s",&list[ i ].lname);]
  5.      printf("\n Enter phone in 010-88888888 format: ");
  6.      scanf("%s",&list[ i ].phone);

复制代码


改成下面的形式更普遍一点

  1. scanf ("%s", list[i].fname);
复制代码





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2