鱼C论坛

 找回密码
 立即注册
查看: 4607|回复: 9

初学结构体~

[复制链接]
发表于 2013-6-8 17:28:33 | 显示全部楼层 |阅读模式
5鱼币
在试做谭浩强书上结构体例11-4建立通讯录一题上,自己写代码如下:

  1. #include"stdio.h"
  2. struct student
  3. {
  4.   int num;
  5.   char *name;         
  6.   char *tel;
  7. }mm[2];
  8. void main()
  9. {
  10.   int i;
  11.   for(i=0;i<2;i++)
  12.   {mm[i].num=i+1;
  13.    printf("input the name:\n");
  14.    gets(mm[i].name);
  15.    printf("input the telNumber:\n");
  16.    gets(mm[i].tel);
  17.   }
  18.   for(i=0;i<2;i++)
  19.    printf("No.%d.Name:%s.Tel:%s.\n",mm[i].num,mm[i].name,mm[i].tel);
  20. }
复制代码
程序运行能通过,但最后输出时候,姓名和电话总显示<NULL>,显示如下图。
如果结构体定义时候不用指针而用字符串数组表示,那个我会,就是现在用指针了,是哪里出了问题?从最后输出来看,姓名和电话都指向空,没被赋到值,gets语句的参数有问题么?哪位帮忙解释一下。
QQ图片20130608172841.jpg

最佳答案

查看完整内容

兄弟,你没有给指针分配空间啊。 还有,换成ide工具学习吧,会比较好一点,turber c太老了 代码: 运行结果:
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-6-8 17:28:34 | 显示全部楼层
兄弟,你没有给指针分配空间啊。
还有,换成ide工具学习吧,会比较好一点,turber c太老了
代码:
  1. #include <stdio.h>

  2. struct student
  3. {
  4.         int num;
  5.         char *name;         
  6.         char *tel;
  7. }mm[2];

  8. void main()
  9. {
  10.         int i;
  11.         for(i=0;i<2;i++)
  12.         {
  13.                 mm[i].num=i+1;
  14.                 printf("input the name:\n");
  15.                 mm[i].name = new char[100];
  16.                 gets(mm[i].name);
  17.                 printf("input the telNumber:\n");
  18.                 mm[i].tel = new char[100];
  19.                 gets(mm[i].tel);
  20.         }
  21.         for(i=0;i<2;i++)
  22.         {
  23.                 printf("No.%d.Name:%s.Tel:%s.\n",mm[i].num,mm[i].name,mm[i].tel);
  24.         }

  25.         _flushall();
  26.         getchar();
  27. }
复制代码
运行结果:
22.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-6-8 17:31:03 | 显示全部楼层
这个问题本身和结构体没什么关系,问题应该在于字符串的输入和引用方面,请求解答。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-6-8 17:39:27 | 显示全部楼层
把结构体的名字和号码 改成数组就可以了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-6-8 17:44:11 | 显示全部楼层
我就怕这样的回复,所以还加了一句数组我自己会了;如果就按结构体里用指针表示呢?哪里出问题了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-6-8 17:45:50 | 显示全部楼层
指针变量不能用gets()函数,要用scanf();
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-6-8 17:50:57 | 显示全部楼层
试了下,还是不行,哪位可以把这代码修改调试没问题后给我讲讲的么?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-6-8 18:14:33 | 显示全部楼层
没遇到过这情况,我都是用scanf的,楼主把指针弄掉吧
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-6-9 01:29:52 | 显示全部楼层

正解,指针如果没有指向的一块空间的话,是不能用的。

struct student
{
        int num;
        char name[20];         
        char tel[24];
} mm[2];

void main()
{
        printf( "sss" );
        int i;
        for( i = 0; i < 2; i++ )
        {
                mm.num = i + 1;
                printf("input the name:\n");
                gets( mm.name );
                printf("input the telNumber:\n");
                gets( mm.tel );
        }
        for( i = 0; i < 2; i++ )
                printf( "No.%d,Name:%s,Tel:%s\n", mm.num, mm.name, mm.tel );
}
这是在全局那里直接定义字符数组,其实用法差不多,看你的需要。
希望对你有帮助,加分加上楼。
一起学习,天天向上,加油吖!!{:7_175:}

评分

参与人数 1鱼币 +2 收起 理由
tsembrace + 2 感谢

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-6-9 08:34:03 | 显示全部楼层
小新110 发表于 2013-6-8 17:28
兄弟,你没有给指针分配空间啊。
还有,换成ide工具学习吧,会比较好一点,turber c太老了
代码:

一语中的啊。。非常感谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-25 21:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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