单链表中本来应该输入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次的循环接收输入,这样就不会输多了。至于怕输上了,你可以在循环的体中输入一个数就打印一个“不够,再输”,直到输够为止。