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
,它们都丢弃任何前导空格。