#include <stdio.h>
#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()
似乎完全被忽略。我在插入完成后尝试将其放置,但也被忽略了。
答案 0 :(得分:0)
在scanf中使用%* c来消耗换行符以及main()中scanf中%d周围的空格。我在MingW上测试了下面的代码,它似乎工作。您的scanf中的'\ n'正在被消耗,使得scanf()返回,而按下回车键的'\ n'仍然保留在IO缓冲区中,再次被scanf()消耗;因此奇怪的行为。
#include <stdio.h>
#include <stdlib.h>
#define length 20
int insert(float *a, int size)
{
int n = 0;
while(n<size && scanf("%f%*c", &a[n]))
{
printf("you entered: ");
printf("%2.1f\n", a[n]);
n++;
}
return n;
}
int main(int argc, char* argv[])
{
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);
return 0;
}
答案 1 :(得分:0)
在scanf
格式字符串中,将"%f\n"
更改为"%f"
。 scanf格式字符串中的\n
并不意味着&#34;等待换行&#34;。
您不必担心等待换行符,因为您使用的唯一格式说明符是%f
和%d
,它们都会丢弃任何前导空格。