鱼C论坛

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

C语言结构体中gets运用问题

[复制链接]
发表于 2016-1-18 20:52:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
#include <stdlib.h>
#define M 2

struct person
{
        char name[10];
        char phone[10];
};
void main()
{
        
        struct person man[M];
        int i;

        for(i=0; i<M ; i++)
        {
                printf("input name:\n");//为什么同样取的是同一个一维数组 两次输入之后值不会被覆盖?
                gets(man[i].name);
                printf("input phone:\n");
                gets(man[i].phone);//为什么同样取的是同一个一维数组 两次输入之后值不会被覆盖?
        }
        printf("\tname\t\t\tphone\n\n");

        for(i=0;i<M;i++)
        {
                printf("%20s\t\t\t%20s\n",man[i].name,man[i].phone);
        }
}
还有man[i].name这里i++ 是指向的哪里?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-1-18 22:06:59 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-1-18 23:24:48 | 显示全部楼层
for 第一次循环时
i = 0

执行的是
                printf("input name:\n");
                gets(man[0].name);
                printf("input phone:\n");
                gets(man[0].phone);

for 第二次循环时
i = 1


执行的是
                printf("input name:\n");
                gets(man[1].name);
                printf("input phone:\n");
                gets(man[1].phone);

因为 M 定义为2,所以 for 循环结束
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-18 23:31:27 | 显示全部楼层
人造人 发表于 2016-1-18 23:24
for 第一次循环时
i = 0

这个man[0].name对应的不是开始定义的char name[0]吗?
如果是这样的话 第二次循环的时候指向的是name[1]的话 之前输入的字符不就被第二次覆盖了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-18 23:48:49 | 显示全部楼层
Arkina 发表于 2016-1-18 23:31
这个man[0].name对应的不是开始定义的char name[0]吗?
如果是这样的话 第二次循环的时候指向的是name[1 ...

第二次循环的时候指向的是name[1],为什么会覆盖之前输入的字符?
之前是 name [0], 现在是 name [1]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-18 23:54:25 | 显示全部楼层
人造人 发表于 2016-1-18 23:48
第二次循环的时候指向的是name[1],为什么会覆盖之前输入的字符?
之前是 name [0], 现在是 name [1]

但他是字符串啊。。char name一个位置就能放下一个字符串吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-18 23:59:20 | 显示全部楼层
Arkina 发表于 2016-1-18 23:54
但他是字符串啊。。char name一个位置就能放下一个字符串吗?

struct person
{
        char name[10];
        char phone[10];
};

struct person man[M];

这回呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-19 00:06:45 | 显示全部楼层
人造人 发表于 2016-1-18 23:59
struct person
{
        char name[10];

是这里结构定义了的man[2]是分别 man[0]和man[1]的意思吗? 然后分别指向一个char型的10个大小的数组? 是这个意思吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-19 00:14:24 | 显示全部楼层
Arkina 发表于 2016-1-19 00:06
是这里结构定义了的man[2]是分别 man[0]和man[1]的意思吗? 然后分别指向一个char型的10个大小 ...

恩,所以不会覆盖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-1-19 00:15:51 | 显示全部楼层
人造人 发表于 2016-1-19 00:14
恩,所以不会覆盖

谢谢大神 终于搞明白了 是我之前一直理解错了钻了牛角尖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-26 18:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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