请教下面这段代码一但输入有误为什么就会出现无限循环

请问下面这段代码一但输入有误为什么就会出现无限循环?
  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];