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

单链表中本来应该输入n个数,小弟我输得数偏少或偏多,如何写程序让它报错

2012-10-08 
单链表中本来应该输入n个数,我输得数偏少或偏多,怎么写程序让它报错?#includestdio.h#includestdlib.h

单链表中本来应该输入n个数,我输得数偏少或偏多,怎么写程序让它报错?
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

typedef struct List
{
int data;
struct List *next;
}LinkList;

void CreateList(LinkList *&L,int a[],int n);
void destory(LinkList *L);
void search(LinkList *L,int k);

void main()
{
LinkList *L;
int k,a[100],n,w;

for (w=0;w<100;w++)
{
printf ("input the n:");
scanf ("%d",&n);

CreateList(L,a,n);

printf("input k:");
scanf("%d",&k);
if (k<1 || k>n)
printf ("error the data");

search(L,k);

destory(L);
}

}

void CreateList(LinkList *&L,int a[],int n)
{
LinkList *tail,*p;
int i;

L = (LinkList *)malloc(sizeof(LinkList));

if(L==NULL)
{
printf("no enough memory!\n");
exit(0);
}

L->next = NULL;
tail = L;

printf ("input %d numbers:",n);

for(i=0;i<n;i++)
{
p = (LinkList *)malloc(sizeof(LinkList));
if(L==NULL)
{
printf("no enough memory!\n");
exit(0);
}
scanf ("%d",&a[i]);
p->data = a[i];
p->next = tail->next;
tail->next = p;
tail = p;
}
}

void destory(LinkList *L)
{
LinkList *p,*q;
p = L->next;
while(p!=NULL)
{
q = p;
p = p->next;
free(q);
}

free(L);
}

void search(LinkList *L,int k)
{
LinkList *p,*q;
int i;
p=L->next;
q=L->next;

for (i=0;i<k;i++)
{
p=p->next;
}
while (p!=NULL)
{
p=p->next;
q=q->next;
}
printf ("%d\n",q->data);
}

这个程序是求n个数中的倒数第k个数!我想问得是如果n值确定了,而我后来输入的数偏大或偏小,再怎么写段程序让它报错啊,希望各位能帮个忙,谢谢啊。。。。

[解决办法]
程序没看
可以输入之后进行一个判断,如果偏大或偏小就给出提示信息
为什么一定要报错呢?
[解决办法]
lz的意思是后来输入的k值比n大或者比1小了怎么提示输入错误的信息吗?当然是在scanf输入k值之后就判断一下就可以了!lz的代码为什么直接粘过来而不选择插入源代码呢,费解费劲!谁都不愿意看这样不对齐的代码~
[解决办法]
看你的代码,每次循环都要输入n,是不是搞错了?
能不能输入n之后,再做n次的循环接收输入,这样就不会输多了。至于怕输上了,你可以在循环的体中输入一个数就打印一个“不够,再输”,直到输够为止。

热点排行