用于循环跳过scanf()

时间:2016-07-14 21:13:42

标签: c scanf

我试图编写一个小程序,用户指定他们希望输入n个nunmbers,然后提示他们在后续行中输入n个浮点数并提示。 预期的输出是

$./a.out
How many number (at least two)? > 4
Enter a number (3 more to enter) > 2
Enter a number (2 more to enter) > 3
Enter a number (1 more to enter) > 5
Enter a number (0 more to enter) > 7

但是,我的程序当前正在读取第一个输入(2,在我的示例中),然后跳过其余提示的用户输入。

我当前代码的输出是

$./a.out
How many number (at least two)? > 4
Enter a number (3 more to enter) > 7
Enter a number (2 more to enter) > 
Enter a number (1 more to enter) > 
Enter a number (0 more to enter) >

我搜索了一个解决方案hereherehere,但我无法解决任何问题。 有没有人有任何关于如何让scanf在这方面工作的建议? 我更喜欢使用scanf,因为我们还没有涵盖任何获取功能的使用。

#include <stdlib.h>
#include <stdio.h>

main(){
    int i,n;
    int temp_count,count,rv;
    float number[10000];
    printf("How many number (at least two)? > ");
    rv = scanf("%d",&n);
    if(n<2||rv!=1){
        printf("Please enter at least two numbers");
    }
    count=n;
    for(i=0;i<n;i++){
        count--;
        printf("Enter a number (%d more to enter) > ",count);
        fflush(stdin);
        scanf(" %.2f",number[i]);
    }
    return(0);
}    //end main

1 个答案:

答案 0 :(得分:1)

用户@ user3121023评论(评论现已删除):

scanf("%f",&number[i]); ampersand needed. Do not fflush(stdin);

scanf()的最后一个参数应该是指向将存储输入的缓冲区的指针。在您的情况下,number[i]float,而不是float *。在&之前添加number[i]将为scanf()提供数组i:位置的地址。

此外,在输入流上使用fflush()是一个坏主意,因为它会调用未定义的行为。它可能有效,但可能没有。有关fflush()的参考,请参阅here

注意:输入流上的fflush()由POSIX (非标准C)定义,并且仅在流可搜索时才定义。标准输入通常是不可寻找的。