每当我执行程序时,它最后会输入一个不需要的额外输入

时间:2015-04-07 13:28:53

标签: c printf stdin scanf fflush

#include<stdio.h>
int main()
{
    int i;
    char name[3];
    float price[3];
    int pages[3];

    printf("Enter names, price and no of pages of 3 books:\n ");
    fflush(stdin);
    for(i=0;i<=2;i++)
        scanf(" %c%f%d\n",&name[i],&price[i],&pages[i]);

    printf("And this is what you have entered:\n ");
    for(i=0;i<=2;i++)
        printf(" %c %f  %d  \n",name[i],price[i],pages[i]);

    return 0;
}

2 个答案:

答案 0 :(得分:3)

\n移除scanf

  scanf(" %c%f%d\n",&name[i],&price[i],&pages[i]);    
           //   ^^ Remove it.   

\n位于scanf,按 Enter scanf将跳过传递到输入缓冲区的\n并期望非{{ 1}}字符停止从输入缓冲区读取。

答案 1 :(得分:1)

根据C11标准文件,第7.21.5.2章,fflush()函数,(强调我的)

  

int fflush(FILE *stream);

     

如果stream指向输出流或最新的输出流   如果没有输入操作,fflush函数会导致该流的任何未写入数据   要传递到主机环境以写入文件; 否则,行为是   未定义。

所以,基本上,fflush(stdin)会调用undefined behaviour

如上所述,正如 @Haccks 先生所述,您应该从\n中提供的格式字符串中删除scanf()