先上一段代码:
int n; while(1) { printf("enter a number:"); if( scanf("%d",&n) == 1 ) break; printf("try again:"); } printf("you typed %d/n",n);
按照一般正常输入是没问题,可是如果首先输入了类似'x'的字符,那么代码会永远循环提示“try again”。
原理:在scanf转换数字的时候,它遇到的任何非数字字符都会终止转换并被保留在输入流中,(注意输入流概念),因此,除非采用了其他的步骤,那么未预料的非数字输入会不断“阻塞”scanf,导致scanf无法越过改错误字符去处理后边合法的数字字符。