Scanf被忽略

#include  #define length 20 main() { float x; int y; float array1[length], array2[length], array3[length]; float ray[length]; int size1 = insert(array1, length); printf("enter number: "); scanf("%d", &y); int size2 = insert(array2, length); int size3 = insert(array3, length); } int insert(float a[], int size) { int n = 0; while(n<size && scanf("%f\n", &a[n]) == 1) { printf("you entered: "); printf("%2.1f\n", a[n]); n++; } return n; } 

当我运行程序时,它执行第一次插入正常,但下次调用函数时, scanf()似乎完全被忽略。 我在插入完成后尝试将其放置,但也被忽略了。

使用scanf中的%* c来消耗换行符以及main()中scanf中%d周围的空格。 我在MingW上测试了下面的代码,它似乎工作。 扫描f中的’\ n’正在被消耗,使得scanf()返回,而按下回车键的’\ n’仍然保留在IO缓冲区中,再由scanf()消耗; 因此奇怪的行为。

 #include  #include  #define length 20 int insert(float *a, int size) { int n = 0; while(n 

scanf格式字符串中,将"%f\n"更改为"%f" 。 scanf格式字符串中的\n并不意味着“等待换行符”。

您不必担心等待换行符,因为您使用的唯一格式说明符是%f%d ,它们都丢弃任何前导空格。