小黄练编程 发表于 2022-1-20 23:56:41

想顺利输入输出几个数据,下面错哪了?

本帖最后由 小黄练编程 于 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-21 00:10:31

你的第一个while 循环结束条件是pp==NULL,所以永远不会进入第二个循环
你需要在第一个循环之前copy一下指针,第二个循环判断的时候判断你的copy指针,这样才能从头开始读

好久没碰C了,给不了代码,自己改一下吧

小黄练编程 发表于 2022-1-21 00:33:21

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

这确实是个问题,不过前面连输入数据都不能全部输入,{:5_100:}

jhq999 发表于 2022-1-21 07:51:03

本帖最后由 jhq999 于 2022-1-21 07:55 编辑

现在循环条件没问题,pp不等于NULL继续循环,等于退出循环
scanf("%d%c",&pp->age,pp->name);

小黄练编程 发表于 2022-1-25 22:20:03

jhq999 发表于 2022-1-21 07:51
现在循环条件没问题,pp不等于NULL继续循环,等于退出循环

没用啊

小黄练编程 发表于 2022-1-25 22:52:38

小黄练编程 发表于 2022-1-25 22:20
没用啊

第二次输入直接跳过了

jhq999 发表于 2022-1-25 23:06:21

小黄练编程 发表于 2022-1-25 22:52
第二次输入直接跳过了

scanf("%d%s",&pp->age,pp->name);
fflush(stdin);

小黄练编程 发表于 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{运行结果:
                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

小黄练编程 发表于 2022-1-25 23:11:39

jhq999 发表于 2022-1-25 23:06


为啥第一次输入与第二次输入 pp地址都一样,pp不是变换了吗

小黄练编程 发表于 2022-1-25 23:13:24

jhq999 发表于 2022-1-25 23:06


我加上确实能第二次输入,但输完就此完结了,后面输出都没就结束了{:5_100:}

小黄练编程 发表于 2022-1-25 23:22:14

本帖最后由 小黄练编程 于 2022-1-25 23:26 编辑

jhq999 发表于 2022-1-25 23:06


我感觉我理解错了,pp是来存地址的,只是存的地址变了,但pp地址一直没变。{:5_111:}
我按上面的{:5_100:}加上去了,貌似不能成功输出啊;{:5_111:}

jhq999 发表于 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{//运行结果:
                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 %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
页: [1]
查看完整版本: 想顺利输入输出几个数据,下面错哪了?