这一道题我最一开始我自己的代码是这样的:
#include<stdio.h>
int main()
{
int n, x=0, a, b, c, d, e;
scanf("%d",&n);
a=n/10000;
b=((n%10000)/1000);
c=(((n%10000)%1000)/100);
d=((((n%10000)%1000)%100)/10);
e=((((n%10000)%1000)%100)%10);
for(x=0;n>0;x++)
{
n=n/10;
}
printf("%d\n",x);
printf("%d %d %d %d %d\n",a,b,c,d,e);
printf("%d%d%d%d%d",e,d,c,b,a);
return 0;
}
但是感觉有点太过于简单, 于是我在网上找其他人对于这道题做出的解答,看到了这样一个代码:
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
int main() {
int n = 0; //设置n为位数。
int x[6]; //设置x[6]为每个位数的数字。
for (int i = 1; i <= 6;i++)
{
int a = 0;
a = getche(); //输入给a的数字是字符形式,所以后面需要减48。
if (a=='\r') //因为不大于5,需要最后一位\r来判断输入结束。
{
printf(" \b\b\b\b\b");//由于getche()的特性,需要将回显清空。
printf("%d\n", n); //回显位数。
break;
}
n++;
x[i] = a-48;
}
printf("%d %d %d %d %d\n",x[1],x[2],x[3],x[4],x[5]);//回显每个位数的数字。
printf("%d%d%d%d%d\n",x[5],x[4],x[3],x[2],x[1]); //反向回显数字。
system("pause");
return 0;
}
这个程序说白了就是利用getche()没有缓冲区的特性。当gerche()读到数字时,他并不回显在屏幕上,也不会把数据存入缓冲区,而是直接运行后面的程序,这导致用户每输入一个数字,就会循环一次。
注: 1.C语言只识别ASCII码,getche()函数只能读取字母,当你输入数字1时,它会转换成ASCII码49。
2.由于getche()的回显特性,你需要在最终的出结果前将屏幕清空,也就是“空格”然后“退格”。
还有代码中的两个新的头文件分别是<stdlib.h>、<stdio.h> 。
<stdlib.h>是一些常用的函数,但是又不知道把它们放到哪里合适,因此就都放到了stdlib.h这个头文件中。
<<conio.h>> 预处理命令,表示程序包含conio.h库文件conio.h库文件定义了通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作,代码中的getche函数就是在这个头文件中。
如果想要继续了解这两个头文件的话可以点击下方传送门。
<stdlib.h>传送门1
<conio.h>传送门2