不清楚为什么运行只会显示输入操作数,不能调用函数
题目: 1) 建立一个单向链表,头指针是list,链表中每个结点包含姓名、基本工资信息,编写count_list函数统计链表中超过平均基本工资的人数。 要求在主函数中建立单向链表(注:当输入基本工资为0时,表示输入结束。),然后调用count_list函数统计链表中超过平均基本工资的人数,最后输出统计结果和平均基本工资。
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
struct worker_node
{
char name[20];
int money;
struct worker_node *next;
};
struct worker_node *createlist()
{
struct worker_node *list,*tail,*p;
list=p=NULL;
int money;
char name[20];
printf("请输入职工的基本工资和姓名(当输入基本工资为0,表示输入结束):");
scanf("%d %c",&money,name);
while(money!=0)
{
p=(struct worker_node*)malloc(sizeof(struct worker_node));
p->money =money;
strcpy(p->name ,name);
if(list==NULL) list=p;
else tail->next =p;
tail=p;
}
return list;
}
struct worker_node *count_list(worker_node *list)
{
struct worker_node *q;
int sum,count,count1;
double average;
sum=count=count1=0;
q=list->next;
if(list!=NULL)
{
for(;q->next !=NULL;q=q->next )
{
sum=sum+q->money ;
count++;
}
average=sum/count;
for(q=list->next ;q->next!=NULL;q=q->next )
{
if(q->money >average) count1++;
}
printf("超过基本工资的人数%d,平均基本工资%lf",count1,average);
}
else printf("无职工信息!");
return list;
}
int main()
{
int average,k;
struct worker_node*p,*list;
printf("*******************\n");
printf("2:输入\t1:超过平均工资的人数和平均工资\n");
printf("*******************\n");
while(1)
{
printf("请输入操作序号:");
scanf("%d",&k);
if(!k)
{
break;
}
switch(k)
{
case 2:list=createlist(); break;
case 1:list=*count_list(worker_node *list); break;
default:break;
}
printf("\n");
}
system("pause");
return 0;
}
- #include <string.h>
- #include <stdio.h>
- #include <stdlib.h>
- struct worker_node {
- char name[20];
- int money;
- struct worker_node *next;
- };
- struct worker_node *createlist() {
- struct worker_node *list, *tail, *p;
- list = tail = p = NULL;
- int money;
- char name[20];
- printf("请输入职工的基本工资和姓名(当输入基本工资为0,表示输入结束):");
- scanf("%d %s", &money, name);
- while (money != 0) {
- p = (struct worker_node *) malloc(sizeof(struct worker_node));
- p->money = money;
- strcpy(p->name, name);
- p->next = NULL;
- if (list == NULL)
- list = p;
- else
- tail->next = p;
- tail = p;
- scanf("%d %s", &money, name);
- }
- return list;
- }
- void count_list(struct worker_node *list) {
- struct worker_node *q;
- int sum, count, count1;
- double average;
- sum = count = count1 = 0;
- q = list;
- if (list != NULL) {
- for (; q != NULL; q = q->next) {
- sum = sum + q->money;
- count++;
- }
- average = (double) sum / count;
- for (q = list; q != NULL; q = q->next) {
- if (q->money > average) count1++;
- }
- printf("超过基本工资的人数%d,平均基本工资%lf", count1, average);
- } else
- printf("无职工信息!");
- }
- int main() {
- int k;
- struct worker_node *list = NULL;
- printf("*******************\n");
- printf("2:输入\t1:超过平均工资的人数和平均工资\n");
- printf("*******************\n");
- while (1) {
- printf("请输入操作序号:");
- scanf("%d", &k);
- if (!k) {
- break;
- }
- switch (k) {
- case 2:
- list = createlist();
- break;
- case 1:
- count_list(list);
- break;
- default:
- break;
- }
- printf("\n");
- }
- system("pause");
- return 0;
- }
复制代码
以下是对代码所做的修改:
- 修改 createlist() 函数中的 scanf 语句,用 %s 而不是 %c 来读取字符串。
- 在 createlist() 函数的循环中增加 scanf 语句,以便不断读取新输入。
- 在 createlist() 函数中为新创建的结点的 next 成员赋值 NULL。
- 修改 count_list() 函数的返回类型为 void,因为它不需要返回链表。
- 修改 count_list() 函数中的遍历条件,使其在链表结尾时停止。
- 删除 main() 函数中的 average 变量,因为它没有使用。
- 修改 main() 函数中的 count_list() 函数调用。
|