首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

:C语言结构体,指针,函数有关问题

2012-03-01 
紧急求助:C语言结构体,指针,函数问题。我有一个程序,实现输入输出,现在输出有问题,请教大家帮忙解决!#inclu

紧急求助:C语言结构体,指针,函数问题。
我有一个程序,实现输入输出,现在输出有问题,请教大家帮忙解决!
#include   <stdio.h>
#include   <stdlib.h>
#include   <string.h>

typedef   struct   student
{
char   number[7];
char   name[12];
char   sex;
float   score[5];
}SSTU;


void   operation(void);

void   main()
{
operation();

}  

static   SSTU   *   input(SSTU   *cp,int   *pn)
{
SSTU   *p;
int   i,   j,num=*pn;

p=(SSTU   *)malloc(num   *   sizeof(SSTU));//动态分配num个存空间
printf( "请输入每个学生的信息:\n ");
for(i=0;i <num;i++)
{

printf( "学号: ");
scanf( "%s ",(p   +   i)-> number);
printf( "姓名: ");
scanf( "%s ",   (p   +   i)-> name);
printf( "姓别(男:M,   女:F): ");
scanf( "%s ",   &(p   +   i)-> sex);
printf( "四门功课的成绩: ");

(p   +   i)-> score[4]   =   0.0F;
for(j   =   0;   j   <   4;   j++)
{
scanf( "%f ",   &((p   +   i)-> score[j]));
(p   +   i)-> score[4]   +=   (p   +   i)-> score[j]   /   4.0F;
}
}

return   p;

}

static   SSTU   *   output(SSTU*p,int   *pn)
{
int   i,num=*pn;

for(i=0;i <num;i++)

printf( "   %d\t ",(p+i)-> number);
printf( "   %d\t ",(p+i)-> name);
printf( "   %d\t ",(p+i)-> sex);
printf( "   %f\t ",(p+i)-> score[4]);

printf( "\n ");
return   p;

}
static   void   menu(void)
{
printf( "------------------------------\n "
      "0.   录入成绩(第一项操作)\n "
      "1.   输入成绩列表\n "
      "2.   退出\n "
      "------------------------------\n "
      "请选择操作项目: ");
}

void   operation(void)
{
SSTU   *(*pf[])(SSTU   *,int   *)   =   {input,   output};
int   num,   oper,   *p;
printf( "请输入学生人学: ");
scanf( "%d ",&num);

while(1)
{
menu();
scanf( "%d ",   &oper);

if(oper   ==   2)   return;
if(oper   >   2   ||   oper   <   0)   continue;
p   =   (*pf[oper])(p,   &num);
}
}

[解决办法]
printf( " %d\t ",(p+i)-> number);
printf( " %d\t ",(p+i)-> name);
printf( " %d\t ",(p+i)-> sex);
—————————————————————
printf( " %s\t ",(p+i)-> number);
printf( " %s\t ",(p+i)-> name);
printf( " %c\t ",(p+i)-> sex);

[解决办法]
在输入的时候就已经错了,
楼主想通过 p+i 来得到下一组数据。可是在链表的操作中并不是这样来实现的。

关键还是在于输入的时候,如果输入的时候有问题,自然就不能正确输出,教材上讲得很清楚该如何输入,楼主再去温习一下。


[解决办法]
int num, oper, *p; //p的类型错了.



scanf( "%s ", &(p + i)-> sex);//scanf( "\n%s ", &(p + i)-> sex);要不读取的是上一行的回车符.

输出时还要判断是不是个空指针.

还有就是楼上说的输出格式.

[解决办法]
问题还是在输入那一块,链表的输入不是怎么简单的。

typedef struct person
{
int id;
char name [21];
char number [13];
struct person *next;
}inform;

inform *Creat()
{
inform *h1, *p1, *p2;

p1 = p2 = (inform *)malloc(LEN);
printf( "\nNO.%d\nUserName: ", ++n);// 先输入第一组数据
scanf( "%s ", p1-> name);

printf( "Telephone: ");
scanf( "%s ", p1-> number);
p1-> id = n;

h1 = p1;

/* 输入从第二组开始及以后的所有数据 */
for (int i=1; i <4; i++)
{
p2 = p1;

p1 = (inform *) malloc (LEN);
printf( "\nNO.%d\nUserName: ", ++n);
scanf( "%s ", p1-> name);
printf( "Telephone: ");
scanf( "%s ", p1-> number);
p1-> id = n;
p2-> next = p1;
}

p2-> next = NULL;
return h1;
}

这是一个简单的对 链表输入 的例子
楼主可以借鉴,并修改一下你自己的那个。

热点排行