鱼C论坛

 找回密码
 立即注册
查看: 955|回复: 11

[已解决]想顺利输入输出几个数据,下面错哪了?

[复制链接]
发表于 2022-1-20 23:56:41 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 小黄练编程 于 2022-1-21 00:34 编辑
#include<stdio.h>
main()
{
        typedef struct stu{
                int age;
                char *name; 
                struct stu *next;
        } ss;

        ss    s1,s2,*pp;  
        s1.next=&s2;
        s2.next=NULL;
        pp=&s1;
        
        while(pp!=NULL)
        {
                printf("输入年龄和名字");
                scanf("%d%c",pp->age,pp->name);
                pp=pp->next;
        }
        pp=&s1;
        while(pp!=NULL)
        {
                printf("%d\n%s\n",pp->age,pp->name);
                pp=pp->next;
        }
}
最佳答案
2022-1-26 08:22:46
本帖最后由 jhq999 于 2022-1-26 08:27 编辑
小黄练编程 发表于 2022-1-25 23:22
我感觉我理解错了,pp是来存地址的,只是存的地址变了,但pp地址一直没变。
我按上面的{:5_ ...

int main()
{
        typedef struct stu{//[quote]运行结果:
                int age;
                char name[32]; //////////////////注意指针只是让你找到东西的地址,而不是东西本身。
                struct stu *next;
        } ss;

        ss    s1,s2,*pp;  
        s1.next=&s2;
        s2.next=NULL;
        pp=&s1;
        
        //printf("%p",&pp);
        
        while(pp!=NULL)
        {        
                //printf("%p",&pp);
                printf("输入年龄和名字");
                scanf("%d %s",&pp->age,pp->name);////////////////pp->name本来就是name这个字符串的指针不用再取指针
                pp=pp->next;
                
               // printf("%p",&pp);
        }
        
        printf("\n\n");
       // printf("%p\n\n%p\n\n%p",&s1,&s2,&pp);

        pp=&s1;//为了能顺利输出。
        while(pp!=NULL)
        {
                printf("%d\n%s\n",pp->age,pp->name);
                pp=pp->next;
        }
                return 0;
}
输入年龄和名字12 abc
输入年龄和名字 15 bvc


12
abc
15
bvc
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-21 00:10:31 | 显示全部楼层
你的第一个while 循环结束条件是pp==NULL,所以永远不会进入第二个循环
你需要在第一个循环之前copy一下指针,第二个循环判断的时候判断你的copy指针,这样才能从头开始读

好久没碰C了,给不了代码,自己改一下吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-21 00:33:21 | 显示全部楼层
翼是孤独 发表于 2022-1-21 00:10
你的第一个while 循环结束条件是pp==NULL,所以永远不会进入第二个循环
你需要在第一个循环之前copy一下指 ...


这确实是个问题,不过前面连输入数据都不能全部输入,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-21 07:51:03 | 显示全部楼层
本帖最后由 jhq999 于 2022-1-21 07:55 编辑

现在循环条件没问题,pp不等于NULL继续循环,等于退出循环
scanf("%d%c",&pp->age,pp->name);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-25 22:20:03 | 显示全部楼层
jhq999 发表于 2022-1-21 07:51
现在循环条件没问题,pp不等于NULL继续循环,等于退出循环

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

使用道具 举报

 楼主| 发表于 2022-1-25 22:52:38 | 显示全部楼层

第二次输入直接跳过了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-25 23:06:21 | 显示全部楼层
小黄练编程 发表于 2022-1-25 22:52
第二次输入直接跳过了
scanf("%d%s",&pp->age,pp->name);
fflush(stdin);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-25 23:09:02 | 显示全部楼层
本帖最后由 小黄练编程 于 2022-1-25 23:14 编辑
jhq999 发表于 2022-1-21 07:51
现在循环条件没问题,pp不等于NULL继续循环,等于退出循环

#include<stdio.h>
main()
{
        typedef struct stu{[quote]运行结果:
                int age;
                char *name; 
                struct stu *next;
        } ss;

        ss    s1,s2,*pp;  
        s1.next=&s2;
        s2.next=NULL;
        pp=&s1;
        
        //printf("%p",&pp);
        
        while(pp!=NULL)
        {        
                //printf("%p",&pp);
                printf("输入年龄和名字");
                scanf("%d %c",&pp->age,&pp->name);
                pp=pp->next;
                
                printf("%p",&pp);
        }
        
        printf("\n\n");
        printf("%p\n\n%p\n\n%p",&s1,&s2,&pp);

        pp=&s1;//为了能顺利输出。
        while(pp!=NULL)
        {
                printf("%d\n%s\n",pp->age,pp->name);
                pp=pp->next;
        }
}


运行结果:

输入年龄和名字18 和
0019FF14输入年龄和名字0019FF14

s1的地址0019FF24
s2的地址0019FF18
pp的地址0019FF14
Press any key to continue

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

使用道具 举报

 楼主| 发表于 2022-1-25 23:11:39 | 显示全部楼层

为啥第一次输入与第二次输入 pp地址都一样,pp不是变换了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-25 23:13:24 | 显示全部楼层

我加上确实能第二次输入,但输完就此完结了,后面输出都没就结束了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-25 23:22:14 | 显示全部楼层
本帖最后由 小黄练编程 于 2022-1-25 23:26 编辑


我感觉我理解错了,pp是来存地址的,只是存的地址变了,但pp地址一直没变。
我按上面的加上去了,貌似不能成功输出啊;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-26 08:22:46 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jhq999 于 2022-1-26 08:27 编辑
小黄练编程 发表于 2022-1-25 23:22
我感觉我理解错了,pp是来存地址的,只是存的地址变了,但pp地址一直没变。
我按上面的{:5_ ...

int main()
{
        typedef struct stu{//[quote]运行结果:
                int age;
                char name[32]; //////////////////注意指针只是让你找到东西的地址,而不是东西本身。
                struct stu *next;
        } ss;

        ss    s1,s2,*pp;  
        s1.next=&s2;
        s2.next=NULL;
        pp=&s1;
        
        //printf("%p",&pp);
        
        while(pp!=NULL)
        {        
                //printf("%p",&pp);
                printf("输入年龄和名字");
                scanf("%d %s",&pp->age,pp->name);////////////////pp->name本来就是name这个字符串的指针不用再取指针
                pp=pp->next;
                
               // printf("%p",&pp);
        }
        
        printf("\n\n");
       // printf("%p\n\n%p\n\n%p",&s1,&s2,&pp);

        pp=&s1;//为了能顺利输出。
        while(pp!=NULL)
        {
                printf("%d\n%s\n",pp->age,pp->name);
                pp=pp->next;
        }
                return 0;
}
输入年龄和名字12 abc
输入年龄和名字 15 bvc


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 15:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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