解题思路:

看过很多人的解题思路,都觉得太麻烦了,个人认为目前我的解题思路相对简单。

主要利用getche()没有缓冲区的特性。当gerche()读到数字时,他并不回显在屏幕上,也不会把数据存入缓冲区,而是直接运行后面的程序,这导致用户每输入一个数字,就会循环一次.


注意事项: 

1.虽然你输入的是数字,但getche()读的是字母,'1'的ASCII码是49,后面需要赋值时,要-48。

2.由于getche()的回显特性,你需要在最终的出结果前将屏幕清空,也就是“空格”然后“退格”。


实例代码:

#include <conio.h>    //注意!网络编辑器找不到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;
}

还有不懂的请在评论区留言

点赞(38)
 

0.0分

17 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 35 条评论

9527 5年前 回复TA
@MideaOne 思路很清晰。
星空 5年前 回复TA
#include<stdio.h>
#include<conio.h>
 int main()
{
	 int  b[5],a,n,m,i,j,k;
	 i=0;
	 printf("请输入一个数字:");
	 scanf("%d",&a);
	 while(a)
	 {
		 m=a%10;
		 a=a/10;
		 
		 b[i]=m;
		 i++;
     
	 }
	 printf("%d\n",i);
	 k=i;
	 for(;i-1>=0;i--)
		 printf("%-2d",b[i-1]);
	 printf("\n");
	 for(j=0;j<k;j++)
	 {
		 printf("%d",b[j]);
		
	 }
	 getch();
	 
	return 0;
}
好惨呀 5年前 回复TA
@2inx 我有点头疼,这不是选择结构的题么怎么大家都搞循环结构
毛林甫 6年前 回复TA
@c175565011 #include<stdio.h>  int main()  {int a,b,c,d,e,f;    scanf("%d",&a);     b=a/10000;     c=a/1000%10;     d=a/100%10;     e=a%100/10;     f=a%10;     if((a/10000)>0)      printf("%d\n",5);      else if((a/1000)>0) 	 printf("%d\n",4); 	 else if ((a/100)>0) 	 printf("%d\n",3); 	 else if((a/10)>0) 	 printf("%d\n",2); 	 else if(a>0) 	{ printf("%d\n",1);}     printf("%d %d %d %d %d\n",b,c,d,e,f); 	printf("%d%d%d%d%d\n",f,e,d,c,b); 	return 0;		   }
付泽松坤 6年前 回复TA
@c175565011 #include<stdio.h> int main() {  	int n,a1,a2,a3,a4,a5;     scanf("%d",&n); 	a1=n%10; 	a2=n/10%10; 	a3=n/100%10; 	a4=n/1000%10; 	a5=n/10000; 	if(n>9999) 	 n=5; 	else if(n>999) 		n=4; 	else if(n>99) 		n=3; 	else if(n>9) 		n=2; 	else 		n=1; 	printf("%d\n",n); 	printf("%d %d %d %d %d\n",a5,a4,a3,a2,a1); 	printf("%d%d%d%d%d\n",a1,a2,a3,a4,a5); 	return 0; }
2inx 6年前 回复TA
@2inx 如果输入的不是五位数字的话 数组就会打印未赋值的数
2inx 6年前 回复TA
#include <stdio.h>
#include <conio.h>
main(){
	int a[5]={0},n=0,i,ch;
	for(i=0;i<5;i++)
	{
		ch=0;
		ch=getche();
		
		if(ch=='\r') 
		{
			break;
		}
		n++;
		a[i]=ch-48;
	}

	printf("\n%d\n",n);
	for(i=0;i<n;i++){
		printf("%d ",a[i]);
	}
	printf("\n");
	for(i=n-1;i>=0;i--){
		printf("%d",a[i]);
	}
	printf("\n");


	
}
c175565011 6年前 回复TA
#include<stdio.h>
int main()
{ 
	int n,a1,a2,a3,a4,a5;
    scanf("%d",&n);
	a1=n%10;
	a2=n/10%10;
	a3=n/100%10;
	a4=n/1000%10;
	a5=n/10000;
	printf("%d %d %d %d %d",a5,a4,a3,a2,a1);
	putchar('\n');
	printf("%d%d%d%d%d",a1,a2,a3,a4,a5);
	putchar('\n');
    if(n>9999)
	 n=5;
	else if(n>999)
		n=4;
	else if(n>99)
		n=3;
	else if(n>9)
		n=2;
	else
		n=1;
	printf("%d",n);
	return 0;
}

我这个写反了  运行后显示:1 2 3 4 5 
                                            54321
                                            5
顺着写就读不出来了    怎么解?   
求指教    非常感谢!
c175565011 6年前 回复TA
@MideaOne 为什么我粘贴复制上去提交    提示说编辑错误?
不记当年 6年前 回复TA
@MideaOne 我和大佬的解题思路差不多