fflush(stdin)function不起作用

我似乎无法弄清楚这段代码有什么问题:

#include  #include  #include  #include  #define MAX 100 #define TRUE 1 #define FALSE 0 char sect_cat; char customer_name[MAX]; char customer_number[MAX]; /* error handling is easier */ int prev_unit = 0; int current_unit = 0; int consumed = 0; int set = FALSE; float init_bill; float tax; float total_bill; void get_userinfo() { printf("Enter sector category: "); scanf("%c", &sect_cat); printf("Enter customer name: "); fflush(stdin); scanf("%sn", &customer_name); set = FALSE; while (set == FALSE) { printf("Enter customer number: "); fflush(stdin); scanf("%s", customer_number); int i; int error; for (i=0, error=0; i current_unit) { printf("ERROR: Current unit must be larger than previous unit\n"); } else set = TRUE; } consumed = current_unit - prev_unit; } int main() { /* Introduce program to users */ printf("\nThis program computes your electric bill based on these sector categories\n\n"); printf("\tResidential(R)\n"); printf("\tIndustrial(I)\n"); printf("\tCommercial(C)\n\n"); printf("Press any key to continue..."); fflush(stdin); getchar(); 

####################编辑

应用templatetypedef的解决方案,程序现在等待customer_name的用户输入。 但是,输入带空格的字符串会导致错误,并且程序会假定输入空格后的单词以用于下一个提示。

 Enter sector category: r Enter customer name: George of the Jungle Enter customer number: ERROR: Only numbers are allowed Enter customer number: ERROR: Only numbers are allowed Enter customer number: 

fflush函数不会从输入流中刷新数据; 它用于将输出流中缓冲的数据推送到目标。 这在此处记录 。 正如之前的SO问题所示 ,尝试使用fflush(stdin)会导致未定义的行为,因此最好避免使用它。

如果您想要在用户输入其角色时输入的返回字符中使用换行符,请考虑以下内容:

 scanf("%c\n", &sect_cat); 

这将吃新线而不是留在stdin

希望这可以帮助!

我认为你打算写fflush(stdout)而不是fflush(stdin)

fflush应该与输出流一起使用,请参阅此处的文档