Scanf被忽略了

时间:2015-10-04 21:37:09

标签: c

#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()似乎完全被忽略。我在插入完成后尝试将其放置,但也被忽略了。

2 个答案:

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