结构体上课中的问题
【求助帖】请及时确认最佳答案,下次提问时可以得到更多关注,问题可以更快解决按照帖子里抄的代码,粘贴复制没有问题,自己手动输入后输出结果是这样的,求各位大神指点一下问题出在哪里了。
下面是源码和问题
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define LEN sizeof(struct student)//结构的大小
struct student *creat(); //创建结构
void print(struct student *head);//结构名称
struct student //定义结构体
{
int num;
float score;
struct student *next;
};
int n;//全局变量
void main()
{
struct student *stu;
stu=creat();
print(stu);
printf("\n\n");
system("pause");
}
struct student *creat()
{
struct student *head;
struct student *p1,*p2;
p1=p2=(struct student *)malloc(LEN);
printf("please enter the num:\n");
scanf("%d",&p1->num);
printf("please enter the score:\n");
scanf("%0.2f",&p1->score);
head =NULL;
n=0;
while(p1->num)
{
n++;
if(n==1)
{
head=p1;
}
else
{
p2->next=p1;
}
p2=p1;
p1 = (struct student *)malloc(LEN);
printf("please enter the num:\n");
scanf("%d",&p1->num);
printf("please enter the score:\n");
scanf("%0.2f",&p1->score);
}
p2 -> next=NULL;
return head;
}
void print(struct student *head)
{
struct student *p;
printf("there ate %d recods:\n",n);
p = head;
if(head!=0)
{
do
{
printf("学好为%d的同学的成绩为%0.2f.\n",p -> num , p -> score);
p = p -> next;
}while(p != 0);
}
}
但是输出结果确实这样的
please enter the num:
111111
please enter the score:
85
please enter the num:
please enter the score://在次输入数据只能输入这一行,scanf("%d",&p1->num);没有输出
请问这是怎么回事啊
scanf函数怎么能限制输入位宽呢?而且你位宽和小数位数控制也有矛盾啊
你需要好好理解一下格式化符号%f前面的小数%m.nf其中m是位宽,n是小数位数。你写的%0.2f位宽为0,小数位数为2。这怎么可能?小数位数为2 的情况下位宽至少为4
请把scanf中%f前的小数都删掉,应该就可以了 sunrise085 发表于 2020-4-12 17:16
scanf函数怎么能限制输入位宽呢?而且你位宽和小数位数控制也有矛盾啊
你需要好好理解一下格式化符号%f前 ...
删掉后可以了,谢谢
a1764441928 发表于 2020-4-13 21:49
删掉后可以了,谢谢
那就给个最佳答案吧
页:
[1]