新手求助!!
为什么第二个scanf还没输入程序就结束了?[图片]
#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(struct Student)
struct Student
{
long num;
float score;
struct Student *next;
};
int n;
struct Student *creat(void)
{
struct Student *head;//头指针是必须的啊
struct Student *p1,*p2;//
n=0;
p1=p2=(struct Student *)malloc(LEN);//使用指针之前必须要让ta有指向,即开辟一个空间
scanf("%1d,%f",&p1->num,&p1->score);
head=NULL;
while(p1->num!=0)
{
n=n+1;//表示第一个结点
if(n==1)
head=p1;//把头指向第一个结点
else p2->next=p1;
p2=p1;
p2=p1=(struct Student *)malloc(LEN);
scanf("%1d,%f",&p1->num,&p1->score);
}
p2->next=NULL;
return(head);
}
int main()
{
struct Student *pt;
pt=creat();
printf("\nnum:%1d\nscore:%5.1f\n",pt->num,pt->score);
return 0;
}
首先,scanf中用逗号可不是好习惯,最好什么都不用
在输入流中还有你之前输入的回车(或者空格),就是上一个结束scanf遗留的 BngThea 发表于 2020-3-26 17:59
首先,scanf中用逗号可不是好习惯,最好什么都不用
在输入流中还有你之前输入的回车(或者空格),就是上 ...
为什么有些scaf有可以用呢?这么vc++的一个bug吗? BngThea 发表于 2020-3-26 17:59
首先,scanf中用逗号可不是好习惯,最好什么都不用
在输入流中还有你之前输入的回车(或者空格),就是上 ...
大佬!!为什么我第一次输入的score是67.5,然而输出的p1->score却是1.000呢? hsk123456 发表于 2020-3-26 18:26
大佬!!为什么我第一次输入的score是67.5,然而输出的p1->score却是1.000呢?
你先把scanf中的逗号去掉,用空格执行两次输入 你的申请内存空间
p1 = p2 = malloc(struct Student *)malloc(LEN)
是啥意思,你是想申请一个内存空间用两个指针指向它,还是想申请两个内存空间 就是要努力呀 发表于 2020-3-26 18:56
你的申请内存空间
是啥意思,你是想申请一个内存空间用两个指针指向它,还是想申请两个内存空间
申请一个内存空间。 BngThea 发表于 2020-3-26 18:44
你先把scanf中的逗号去掉,用空格执行两次输入
我把scanf里的逗号去掉了,用空格来代替之后是能多次输入了,但p1->score还是1.000 hsk123456 发表于 2020-3-26 19:07
我把scanf里的逗号去掉了,用空格来代替之后是能多次输入了,但p1->score还是1.000
你在第一个scanf后面printf一下先看看是不是你输入的值,如果是,证明循环体里的操作有问题 hsk123456 发表于 2020-3-26 19:06
申请一个内存空间。
那你为啥要用两个指针指向它 你的程序错误是由于敲代码的时候粗心导致的
scanf中第一个%后面你洗的是1d,应该是ld,你把字母l写成数字1了
%1d意思是读取一位整数,%ld才是读取一个长整型
当然楼上几位说的也很好,scanf中尽量不要有其他字符,两个格式化符号完全可以直接挨着,反正输入的时候是需要用空白符来表示一个数据的结束的
scanf("%ld%f",&p1->num,&p1->score); 就是要努力呀 发表于 2020-3-26 19:24
那你为啥要用两个指针指向它
动态创建链表 sunrise085 发表于 2020-3-26 21:10
你的程序错误是由于敲代码的时候粗心导致的
scanf中第一个%后面你洗的是1d,应该是ld,你把字母l写成数字1 ...
嗯嗯,谢谢你的回答!!! sunrise085 发表于 2020-3-26 21:10
你的程序错误是由于敲代码的时候粗心导致的
scanf中第一个%后面你洗的是1d,应该是ld,你把字母l写成数字1 ...
啊!你看得好认真啊!!真的是我粗心了!修改成ld之后就行了!!感谢感谢啊!!!! BngThea 发表于 2020-3-26 18:44
你先把scanf中的逗号去掉,用空格执行两次输入
scanf中第一个%后面我写成1d,应该是ld,改完这个就能正确输出了。谢谢你啦!!
页:
[1]