请教下面这段代码一但输入有误为什么就会出现无限循环
请问下面这段代码一但输入有误为什么就会出现无限循环?
1 #include <stdio.h>
2
3 int sjx( int a, int b, int c )
4 {
5 if( a+b>c && a+c>b && b+c>a )
6 return 1;
7 else
8 return 0;
9 }
10
11 int main()
12 {
13 int sj;
14 int a,b,c;
15
16 printf( "请输入三边,用逗号区分:");
17
18 do
19 {
20 scanf( "%d,%d,%d", &a, &b, &c );
21 sj = sjx( a, b, c );
22
23 if( sj == 0 )
24 printf( "bug" );
25
26 }while( sj == 0 );
27
28 printf("1");
29
30 }
------解决思路----------------------
一误永误,因为你循环里,没考虑怎么处理输入错误
当出现错误的时候,循环内部解决不了
而 读数的时候,错误的数据,不会被读走,依然留在缓冲区中,下次读数,依然读取出错,于是就无限制循环了
另一个原因是,你本来就根据正确读取的数据,来结束循环的,
现在没有正确读取,结束条件永远达不到,只能死循环
------解决思路----------------------
do
19 {
20 scanf( "%d,%d,%d", &a, &b, &c );
21 sj = sjx( a, b, c );
22 fflush( stdin ); //清空输入缓冲区
23 if( sj == 0 )
{
24 printf( "bug" );
break; //出错,中断循环
}
25
26 }while( sj == 0 );
------解决思路----------------------
在每个最后不带\n的printf后面加fflush(stdout);
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。
1 #include <stdio.h>
2
3 int sjx( int a, int b, int c )
4 {
5 if( a+b>c && a+c>b && b+c>a )
6 return 1;
7 else
8 return 0;
9 }
10
11 int main()
12 {
13 int sj;
14 int a,b,c;
15
16 printf( "请输入三边,用逗号区分:");
17
18 do
19 {
20 scanf( "%d,%d,%d", &a, &b, &c );
21 sj = sjx( a, b, c );
22
23 if( sj == 0 )
24 printf( "bug" );
25
26 }while( sj == 0 );
27
28 printf("1");
29
30 }
------解决思路----------------------
一误永误,因为你循环里,没考虑怎么处理输入错误
当出现错误的时候,循环内部解决不了
而 读数的时候,错误的数据,不会被读走,依然留在缓冲区中,下次读数,依然读取出错,于是就无限制循环了
另一个原因是,你本来就根据正确读取的数据,来结束循环的,
现在没有正确读取,结束条件永远达不到,只能死循环
------解决思路----------------------
do
19 {
20 scanf( "%d,%d,%d", &a, &b, &c );
21 sj = sjx( a, b, c );
22 fflush( stdin ); //清空输入缓冲区
23 if( sj == 0 )
{
24 printf( "bug" );
break; //出错,中断循环
}
25
26 }while( sj == 0 );
------解决思路----------------------
在每个最后不带\n的printf后面加fflush(stdout);
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。
//请今后要用
int c;
scanf("%c",&c);
//时,都改为
char s[2];
int c;
scanf("%1s",s);
c=s[0];