先看一段正确的代码
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>
#include<stdlib.h>
int main()
{
int num = 0;
printf("请输入一个不多于5位数字的数:>");
scanf("%d", &num);
while(num > 99999 || num<0)
{
printf("\n输入错误!请重新输入:>"); //
scanf("%d", &num); //
}
if (num / 10 == 0)
{
printf("\n一位数字\n");
}
if ((num/10)>0 && (num/10)<=9)
{
printf("\n2位数字\n");
}
if ((num / 100) > 0 && (num / 100) <= 9)
{
printf("\n3位数字\n");
}
if ((num / 1000) > 0 && (num / 1000) <= 9)
{
printf("\n4位数字\n");
}
if ((num / 10000) > 0 && (num / 10000) <= 9)
{
printf("\n5位数字\n");
}
system("pause");
return 0;
}
注:下边一段代码会发生死循环
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>int main(){ int num = 0; printf("请输入一个不多于5位数字的数:>"); scanf("num = %d", &num); while(num > 99999 || num<0) { printf("\n输入错误!请重新输入:>"); scanf("num = %d", &num); } if (num / 10 == 0) { printf("\n一位数字\n"); } if ((num/10)>0 && (num/10)<=9) { printf("\n2位数字\n"); } if ((num / 100) > 0 && (num / 100) <= 9) { printf("\n3位数字\n"); } if ((num / 1000) > 0 && (num / 1000) <= 9) { printf("\n4位数字\n"); } if ((num / 10000) > 0 && (num / 10000) <= 9) { printf("\n5位数字\n"); } system("pause"); return 0;}
注:scanf双引号之间一般只写%s等一些。如果在双引号之间有个空格,运行就会错误。
应为输入一个错误数字与回车键,scanf是输入型函数,他会向缓冲区拿数据,第一个scanf把错误数据拿走,剩下\0被第二个scanf拿走。所以会成为死循环。所以我们需要清理缓冲区:?
(1)在第二个scanf前面加一个getchar(),把空格给他,可是如果空格比较多的话就不合适了
(2)在第二个scanf前面加一个fflush(stdin)//清理缓冲区
可是在vs2015版本之后就不能用了;
(3)加一个循环//常用方法
在第二个scanf之前加下列代码
while (getchar() != '\n') { ; }
最后效果代码
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>int main(){ int num = 0; printf("请输入一个不多于5位数字的数:>"); scanf("num = %d", &num); while(num > 99999 || num<0) { printf("\n输入错误!请重新输入:>"); while (getchar() != '\n') { ; } //fflush(stdin); //刷新输入缓冲区 //getchar(); scanf("num = %d", &num); } if (num / 10 == 0) { printf("\n一位数字\n"); } if ((num/10)>0 && (num/10)<=9) { printf("\n2位数字\n"); } if ((num / 100) > 0 && (num / 100) <= 9) { printf("\n3位数字\n"); } if ((num / 1000) > 0 && (num / 1000) <= 9) { printf("\n4位数字\n"); } if ((num / 10000) > 0 && (num / 10000) <= 9) { printf("\n5位数字\n"); } system("pause"); return 0;}如有错误,希望广大网友留言,谢谢;