刚学数据结构,在使用malloc函数时遇到了奇怪的问题:
不知道为什么用了malloc之后,运行会自行输出变量的原始值,我的printf函数明明输出的是存储后的值。
一开始程序会自行输出“屯屯屯屯屯屯屯屯”以及数字乱码,我百度之后就在malloc函数后对name数组、no数组和price赋了初值0,但程序还是自行输出了price的初始值0.00,如下图
一些同学跟我一样的用法却没有这样的问题。
为什么会有这样的情况?怎样才能让初始值不自行输出?
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct LNode
{
char no[20];
char name[50];
float price;
struct LNode *next;
}LNode,*LinkList;
int main()
{
int n=0;
LNode *p,*q;
LinkList L = (LNode *)malloc(sizeof(LNode));
L->no[0]='\0';
L->name[0]='\0';
L->price=0;
L->next = NULL;
q = L;
while (1)
{
p = (LNode *)malloc(sizeof(LNode));//开辟新结点
p->next = NULL;
scanf_s("%s %s %f", p->no, 20, p->name, 50, &p->price);
if (p->no[0] == '0'&&p->name[0] == '0'&&p->price == 0)
break;
q->next = p;
q = p;
}
p = L;
while (p->next!= NULL)
{//计结点个数
n++;
p = p->next;
}
p = L;
printf("%d\n", n);
while (p!=NULL)
{//输出
printf("%s %s %.2f\n", p->no, p->name, p->price);
p = p->next;
}
system("PAUSE");
return 0;
}