C语言:编程实现输入,输出

将1到20,放在长度19的数组里,有一个数没有在里面,编程实现输入的过程(要控制输入数字的大小,只允许输入1-20区间的数字,输入了要提示出错,如果输入的过程中重复输入了同一个数字,如前面已经输入了12,后面又输入12,要提示出错,要求重新输入不同的数字),当输入结束后,要显示出已经输入了哪些数字,还要显示哪个数字没有输入。

方法很多,我用数组实现。
定义20大小数组,下标加1就是1~20的数字,数组元素值就是输入状态。

#include<stdio.h>

#include<windows.h>

#include<conio.h>

void show(int *nums);

int main()

{

int nums[20]={0};//表示1到20个数字的状态,0表示未被输入,1表示已被输入

int save[19],*p=save,n=19,in=0,flag;

while(n--)

{

flag=1;

system("cls");

show(nums);

printf("请输入一个数字(1~20):"),scanf("%d",&in);

while(in<1 || in>20 || nums[in-1]==1)

{

if(in<1 || in>20)

printf("输入错误!只能输入1~20的整数!...按任意键重新输入...\n"),getch();

else if(nums[in-1]==1)

printf("输入错误!数字%d已输入,不能重复!...按任意键重新输入...\n",in),getch();

flag=0;

n++;

break;

}

if(flag)

*p=in,nums[in-1]=1;

}

return 0;

}

void show(int *nums)

{

int i;

printf("已输入数字:");

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

if(nums[i])

printf("%d ",i+1);

printf("\n未输入数字:");

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

if(!nums[i])

printf("%d ",i+1);

printf("\n");

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-07-01
#include <stdio.h>
int main()
{ int i,x,a[19],b[21]= {0};
for (i = 0; i < 19; i++)
{ scanf("%d",&x);
if(x<1||x>20)
{ printf("请输入1~20之间的数字\n");
i--;
continue;
}
if(b[x])
{ printf("前面已经输入%d了!\n",x);
i--;
contine;
}
a[i]=x;
b[x]=1;
}
printf("已经输入的数字:\n");
for(i=1; i<21; i++)
if(b[i])
printf("%d ", i);
else
x=i;
printf("\n未输入的数字:%d\n",x);
return 0;
}
第2个回答  2019-07-01
#include <stdio.h>
int main()
{
int t[21] = {0, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 };
int i,m=0;
for (i = 1; i < 20; ++i)
{
while (1)
{
printf("请输入第%d个1-20之间的数字:",i);
if (1 != scanf("%d", &m) || 1 > m || m > 20||t[m]==0)
{
if (t[m] == 0)
printf("输入重复!!");
else
printf("输入错误!!");
rewind(stdin); //清除缓冲区,考虑到输入了字母的情况
continue;
}
t[m] = 0;
break;
}
}
printf("已经输入的数字有:");
for (i = 1; i <= 20; ++i)
{
if (t[i] == 0)
{
printf("%2d,", i);
}
else
{
m = i;
}
}
printf("\n没有输入的数字是:%d", m);
return 0;
}
相似回答