user-0 提问: 前辈们请指教一下链表问题

回复:
user: user-1
content: 兄弟 你的逗号看起来真滴是中文逗号

user: user-2
content: 引用 5 楼 小张在努力丫 的回复:[quote=引用 4 楼 自信男孩 的回复:]楼主看一下你的scanf输入的格式是什么，是不是少了一个逗号,并且是英文的逗号;  #include<stdio.h> #include<stdlib.h>  #define LEN sizeof(struct Student)  struct Student {     long int data;     float score;     struct Student *next; };  int n; struct Student *creat(void) {     struct Student *p1,*p2,*head;     head=NULL;      p2=p1=(struct Student *)malloc(LEN);     n=0;     //scanf("%d,%f",&p1->data,&p1->score);     scanf("%ld,%f",&p1->data, &p1->score);     while(p1->data!=0)     {         n=n+1;         if(n==1)             head=p1;         else p2->next=p1;         p2=p1;         p1=(struct Student *)malloc(LEN);         //scanf("%d,%f",&p1->data,&p1->score);         scanf("%ld,%f",&p1->data,&p1->score);     }     free(p1);//p1没加入链表，应该释放     p2->next=NULL;     return head; } //print(struct Student *head) void print(struct Student *head) {     struct Student *p;     p=head;     //while(p->data)     while(p)     {         //printf("%d%.1f\n",p->data,p->score);         printf("%ld\t%.1f\n",p->data,p->score);         p=p->next;     } } //void main() int main() {     struct Student *t;     t=creat();     print(t); } 供参考～  其他问题看代码～如上是scanf的逗号应该是没错，估计是我的编译软件出了问题，我还有些细节与要注意，我用老哥你的代码运行是有问题，我得换个软件，谢谢老哥了[/quote] 是运行问题还是编译问题？如果是运行问题，那么跟换软件有啥关系？你说的是编译问题吧，把问题贴出来吧

user: user-0
content: 引用 3 楼 qq_37230152 的回复: 你的程序在我这跑的结果，你看看我的输入啧这感觉是我的编译软件出了问题

user: user-0
content: 引用 4 楼 自信男孩 的回复:楼主看一下你的scanf输入的格式是什么，是不是少了一个逗号,并且是英文的逗号;  #include<stdio.h> #include<stdlib.h>  #define LEN sizeof(struct Student)  struct Student {     long int data;     float score;     struct Student *next; };  int n; struct Student *creat(void) {     struct Student *p1,*p2,*head;     head=NULL;      p2=p1=(struct Student *)malloc(LEN);     n=0;     //scanf("%d,%f",&p1->data,&p1->score);     scanf("%ld,%f",&p1->data, &p1->score);     while(p1->data!=0)     {         n=n+1;         if(n==1)             head=p1;         else p2->next=p1;         p2=p1;         p1=(struct Student *)malloc(LEN);         //scanf("%d,%f",&p1->data,&p1->score);         scanf("%ld,%f",&p1->data,&p1->score);     }     free(p1);//p1没加入链表，应该释放     p2->next=NULL;     return head; } //print(struct Student *head) void print(struct Student *head) {     struct Student *p;     p=head;     //while(p->data)     while(p)     {         //printf("%d%.1f\n",p->data,p->score);         printf("%ld\t%.1f\n",p->data,p->score);         p=p->next;     } } //void main() int main() {     struct Student *t;     t=creat();     print(t); } 供参考～  其他问题看代码～如上

user: user-0
content: 引用 4 楼 自信男孩 的回复:楼主看一下你的scanf输入的格式是什么，是不是少了一个逗号,并且是英文的逗号;  #include<stdio.h> #include<stdlib.h>  #define LEN sizeof(struct Student)  struct Student {     long int data;     float score;     struct Student *next; };  int n; struct Student *creat(void) {     struct Student *p1,*p2,*head;     head=NULL;      p2=p1=(struct Student *)malloc(LEN);     n=0;     //scanf("%d,%f",&p1->data,&p1->score);     scanf("%ld,%f",&p1->data, &p1->score);     while(p1->data!=0)     {         n=n+1;         if(n==1)             head=p1;         else p2->next=p1;         p2=p1;         p1=(struct Student *)malloc(LEN);         //scanf("%d,%f",&p1->data,&p1->score);         scanf("%ld,%f",&p1->data,&p1->score);     }     free(p1);//p1没加入链表，应该释放     p2->next=NULL;     return head; } //print(struct Student *head) void print(struct Student *head) {     struct Student *p;     p=head;     //while(p->data)     while(p)     {         //printf("%d%.1f\n",p->data,p->score);         printf("%ld\t%.1f\n",p->data,p->score);         p=p->next;     } } //void main() int main() {     struct Student *t;     t=creat();     print(t); } 供参考～  其他问题看代码～如上是scanf的逗号应该是没错，估计是我的编译软件出了问题，我还有些细节与要注意，我用老哥你的代码运行是有问题，我得换个软件，谢谢老哥了

user: user-1
content: 你的程序在我这跑的结果，你看看我的输入

user: user-2
content: 楼主看一下你的scanf输入的格式是什么，是不是少了一个逗号,并且是英文的逗号;  #include<stdio.h> #include<stdlib.h>  #define LEN sizeof(struct Student)  struct Student {     long int data;     float score;     struct Student *next; };  int n; struct Student *creat(void) {     struct Student *p1,*p2,*head;     head=NULL;      p2=p1=(struct Student *)malloc(LEN);     n=0;     //scanf("%d,%f",&p1->data,&p1->score);     scanf("%ld,%f",&p1->data, &p1->score);     while(p1->data!=0)     {         n=n+1;         if(n==1)             head=p1;         else p2->next=p1;         p2=p1;         p1=(struct Student *)malloc(LEN);         //scanf("%d,%f",&p1->data,&p1->score);         scanf("%ld,%f",&p1->data,&p1->score);     }     free(p1);//p1没加入链表，应该释放     p2->next=NULL;     return head; } //print(struct Student *head) void print(struct Student *head) {     struct Student *p;     p=head;     //while(p->data)     while(p)     {         //printf("%d%.1f\n",p->data,p->score);         printf("%ld\t%.1f\n",p->data,p->score);         p=p->next;     } } //void main() int main() {     struct Student *t;     t=creat();     print(t); } 供参考～  其他问题看代码～如上

user: user-0
content: 也不对呀，不管是加没加，还是没用

user: user-1
content: scanf();函数是格式化输入的意思，这里的格式就是你写的("%d,%f"),那么你的输入也应该一样4564 32.0改成4564,32.0就不会一输入小数就直接输出了; 你发现每次输出数据乘了10应该是还是格式问题，scanf认为你没有输入第二个数，所以就认为第二个数是0，你格式化输出的两个数也没有分开，你输入123 123，程序认为你输入的是123,0 123,0 所以给你输出1230 1230，看起来像是乘了10