#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;
}
答案 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()
。