C语言Scanf()死循环问题。
输入字母或者不是数字的话他就死循环了怎么解决呢?如果输入字母,如何返回到重新输入的地方。#include<stdio.h>#include<math.h>intmain(...
输入字母或者不是数字的话 他就死循环了 怎么解决呢?
如果输入字母,如何返回到重新输入的地方。
#include <stdio.h>
#include <math.h>
int main()
{
int x,a,b,c,p;
char ch;
p=1;
do{
printf("\n请输入一个三位数:");
scanf("%d",&x);
if(x>=100 && x<=999)
{
a=x/100;
b=x/10%10;
c=x%10;
// printf("%d %d %d\n",a,b,c);
if(x==pow(a,3)+pow(b,3)+pow(c,3))
printf("\n是水仙花数!\n");
else
printf("\n不是水仙花数!\n");
printf("\n是否继续?(Y/N)\n");
scanf("%c",&ch);
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
p=1;
else
p=0;
}
else
printf("\n请输入正确的三位数!\n");
// printf("%d P:",p);
// scanf("%d",&x);
}
while(p!=0);
} 展开
如果输入字母,如何返回到重新输入的地方。
#include <stdio.h>
#include <math.h>
int main()
{
int x,a,b,c,p;
char ch;
p=1;
do{
printf("\n请输入一个三位数:");
scanf("%d",&x);
if(x>=100 && x<=999)
{
a=x/100;
b=x/10%10;
c=x%10;
// printf("%d %d %d\n",a,b,c);
if(x==pow(a,3)+pow(b,3)+pow(c,3))
printf("\n是水仙花数!\n");
else
printf("\n不是水仙花数!\n");
printf("\n是否继续?(Y/N)\n");
scanf("%c",&ch);
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
p=1;
else
p=0;
}
else
printf("\n请输入正确的三位数!\n");
// printf("%d P:",p);
// scanf("%d",&x);
}
while(p!=0);
} 展开
展开全部
把scanf()换成下面例子中的函数试试:
#include <stdio.h>
#include <stdlib.h>
#define HEAD_N 10 //Input_uint(FILE *fp)函数中限制输入的最大整数位数
int Input_uint1(); //无符号整形输入函数
int Input_uint2(int digit);//无符号整形输入函数截取前digit位
int main()
{
int a,b;
printf("请输入赋值给变量a的整数:");
a=Input_uint1();
printf("请输入赋值给变量b的整数(截取前3位):");
b=Input_uint2(3);
printf("a=%d;b=%d\n",a,b);
return 0;
}
int Input_uint1()
{
int count_a=0,ratio=1,count_c=0,number=0,judge=1;
//count_a计数变量;ratio转换系数,1,10,100等;
// count_c计数变量;number函数返回值;
// judge输入判断变量,-1出错;
char str[HEAD_N];
for (count_a=0;count_a<HEAD_N;count_a++)
str[count_a]='0';
do
{
if (judge==1) ;
else
{
printf("\n输入错误。请输入一个大于等于零的整数:");
}
judge=1;
for(count_a=HEAD_N-1,count_c=HEAD_N-1;count_a>=0;count_a--,count_c--)
{
str[count_a]=getchar();
if(!((str[count_a]>='0' && str[count_a]<='9') || (str[count_a]==10)))
judge=-1;
if(str[count_a]==10 || count_a==0)
{
if(str[count_a]==10)
break;
if(str[count_a]!=10 && count_a==0)
{
for(;;)
{
count_a=getchar();
if(!((count_a>='0'&& count_a<='9') || (count_a==10)))
judge=-1;
if (count_a==10)
break;
}
}
count_a=0;
}
}
if (judge>0)
{
for(count_a=count_c+1;count_a<HEAD_N;count_a++)
{
if (str[count_a]>='0' && str[count_a]<='9')
{
number+=(str[count_a]-'0')*ratio;
ratio*=10;
}
else
break;
}
}
}while(judge<0);
return number;
}
int Input_uint2(int digit)
{
int count_a=0,ratio=1,count_c=0,number=0,judge=1;
//count_a计数变量;ratio转换系数,1,10,100等;
// count_c计数变量;number函数返回值;
// judge输入判断变量,-1出错;
char str[HEAD_N];
if (digit>HEAD_N)
digit=HEAD_N;
for (count_a=0;count_a<digit;count_a++)
str[count_a]='0';
do
{
if (judge==1) ;
else
{
printf("\n输入错误。请输入一个大于等于零的整数:");
}
judge=1;
for(count_a=digit-1,count_c=digit-1;count_a>=0;count_a--,count_c--)
{
str[count_a]=getchar();
if(!((str[count_a]>='0' && str[count_a]<='9') || (str[count_a]==10)))
judge=-1;
if(str[count_a]==10 || count_a==0)
{
if(str[count_a]==10)
break;
if(str[count_a]!=10 && count_a==0)
{
for(;;)
{
count_a=getchar();
if(!((count_a>='0'&& count_a<='9') || (count_a==10)))
judge=-1;
if (count_a==10)
break;
}
}
count_a=0;
}
}
if (judge>0)
{
for(count_a=count_c+1;count_a<digit;count_a++)
{
if (str[count_a]>='0' && str[count_a]<='9')
{
number+=(str[count_a]-'0')*ratio;
ratio*=10;
}
else
break;
}
}
}while(judge<0);
return number;
}
展开全部
问题出在scanf("%d",&x);它会读入上面输入残留的信息。
你可以用fflush(stdin);清除残余后再读
你可以用fflush(stdin);清除残余后再读
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
判断输入的是否为数字,不是数字忽略,if(isalpha(x)){continue;}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
if(x>=100 && x<=999)改成if((x>=100) &&( x<=999))试试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询