鱼C论坛

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

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

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

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

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

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

  9.         ss    s1,s2,*pp;  
  10.         s1.next=&s2;
  11.         s2.next=NULL;
  12.         pp=&s1;
  13.        
  14.         while(pp!=NULL)
  15.         {
  16.                 printf("输入年龄和名字");
  17.                 scanf("%d%c",pp->age,pp->name);
  18.                 pp=pp->next;
  19.         }
  20.         pp=&s1;
  21.         while(pp!=NULL)
  22.         {
  23.                 printf("%d\n%s\n",pp->age,pp->name);
  24.                 pp=pp->next;
  25.         }
  26. }
复制代码

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

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

  8.         ss    s1,s2,*pp;  
  9.         s1.next=&s2;
  10.         s2.next=NULL;
  11.         pp=&s1;
  12.         
  13.         //printf("%p",&pp);
  14.         
  15.         while(pp!=NULL)
  16.         {        
  17.                 //printf("%p",&pp);
  18.                 printf("输入年龄和名字");
  19.                 scanf("%d %s",&pp->age,pp->name);////////////////pp->name本来就是name这个字符串的指针不用再取指针
  20.                 pp=pp->next;
  21.                
  22.                // printf("%p",&pp);
  23.         }
  24.         
  25.         printf("\n\n");
  26.        // printf("%p\n\n%p\n\n%p",&s1,&s2,&pp);

  27.         pp=&s1;//为了能顺利输出。
  28.         while(pp!=NULL)
  29.         {
  30.                 printf("%d\n%s\n",pp->age,pp->name);
  31.                 pp=pp->next;
  32.         }
  33.                 return 0;
  34. }
复制代码
  1. 输入年龄和名字12 abc
  2. 输入年龄和名字 15 bvc


  3. 12
  4. abc
  5. 15
  6. 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继续循环,等于退出循环
  1. 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
第二次输入直接跳过了
  1. scanf("%d%s",&pp->age,pp->name);
  2. fflush(stdin);
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

  1. #include<stdio.h>
  2. main()
  3. {
  4.         typedef struct stu{[quote]运行结果:
  5.                 int age;
  6.                 char *name;
  7.                 struct stu *next;
  8.         } ss;

  9.         ss    s1,s2,*pp;  
  10.         s1.next=&s2;
  11.         s2.next=NULL;
  12.         pp=&s1;
  13.        
  14.         //printf("%p",&pp);
  15.        
  16.         while(pp!=NULL)
  17.         {       
  18.                 //printf("%p",&pp);
  19.                 printf("输入年龄和名字");
  20.                 scanf("%d %c",&pp->age,&pp->name);
  21.                 pp=pp->next;
  22.                
  23.                 printf("%p",&pp);
  24.         }
  25.        
  26.         printf("\n\n");
  27.         printf("%p\n\n%p\n\n%p",&s1,&s2,&pp);

  28.         pp=&s1;//为了能顺利输出。
  29.         while(pp!=NULL)
  30.         {
  31.                 printf("%d\n%s\n",pp->age,pp->name);
  32.                 pp=pp->next;
  33.         }
  34. }
复制代码



运行结果:

输入年龄和名字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_ ...

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

  8.         ss    s1,s2,*pp;  
  9.         s1.next=&s2;
  10.         s2.next=NULL;
  11.         pp=&s1;
  12.         
  13.         //printf("%p",&pp);
  14.         
  15.         while(pp!=NULL)
  16.         {        
  17.                 //printf("%p",&pp);
  18.                 printf("输入年龄和名字");
  19.                 scanf("%d %s",&pp->age,pp->name);////////////////pp->name本来就是name这个字符串的指针不用再取指针
  20.                 pp=pp->next;
  21.                
  22.                // printf("%p",&pp);
  23.         }
  24.         
  25.         printf("\n\n");
  26.        // printf("%p\n\n%p\n\n%p",&s1,&s2,&pp);

  27.         pp=&s1;//为了能顺利输出。
  28.         while(pp!=NULL)
  29.         {
  30.                 printf("%d\n%s\n",pp->age,pp->name);
  31.                 pp=pp->next;
  32.         }
  33.                 return 0;
  34. }
复制代码
  1. 输入年龄和名字12 abc
  2. 输入年龄和名字 15 bvc


  3. 12
  4. abc
  5. 15
  6. bvc
复制代码

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 05:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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