问题是写一条计算式,接受输入。计算结束后询问是否继续计算,再接受一次输入。两次都使用scanf()。
printf("\nEnter the calculation\n");
scanf("%lf %c %lf", &number1, &operation, &number2);
……
printf("Do you wanna do the calculation again? Enter your choice.(Y or N)\n");
printf(" Your choice is: ");
scanf("%c", &choice);
发现第二个scanf直接跳过。在两个scanf()之间使用fflush(stdio)能解决问题,但我不明白原理。何为缓冲区?是不是PC为每个变量临时划分出来的“内存”?可是我用char分别定义了operation和choice,它们怎么会共享同一个缓冲区?这让我很迷惑,不明白其原理,不知道什么时候又会产生这种情况。如何理解?谢谢。
在scanf("%lf %c %lf", &number1, &operation, &number2);之后你输入你的三个参数值后之后肯定输入了一个回车,第二个scanf会把这个回车符作为你scanf("%c", &choice);的内容,所以就直接跳过了,这是因为在函数会把你的输入内容存到输入缓冲区中,如果你上次输入内容多了,多的内容会一直存在缓冲区中,知道下次遇到sanf语句,就把上次输入多的内容赋值给sacnf语句
不管你定义的什么变量,你在dos窗口中输入参数,系统都会吧你的输入存到缓冲区中,然后在从缓冲区把数据读到你定义的变量的内存空间中
而利用fflush(stdio)语句可以吧缓冲区中多余的数据清空,所以就不会出现你说的现象了追问
不管你定义的什么变量,你在dos窗口中输入参数,系统都会吧你的输入存到缓冲区中,然后在从缓冲区把数据读到你定义的变量的内存空间中
而利用fflush(stdio)语句可以吧缓冲区中多余的数据清空,所以就不会出现你说的现象了追问
你的意思是说,我在dos窗口下为了确认计算式子,如“4×5”,然后【为了确认】【按的那一下回车】也被放到缓冲区里面去了?(那个回车算是“一箭双雕”了?)——这就能解释为什么我在下面复制多了一个scanf()就没被跳过。
追答是的
温馨提示:答案为网友推荐,仅供参考