我试图编写一个小程序,用户指定他们希望输入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) >
我搜索了一个解决方案here,here和here,但我无法解决任何问题。 有没有人有任何关于如何让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
答案 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)定义,并且仅在流可搜索时才定义。标准输入通常是不可寻找的。 p>