当前位置: 代码迷 >> C语言 >> 为什么最后的一个scanf不能被执行
  详细解决方案

为什么最后的一个scanf不能被执行

热度:479   发布时间:2006-09-08 10:35:26.0
为什么最后的一个scanf不能被执行
#include<stdio.h>
#include<dos.h>
main()
{
float k1,k2,k3;
char a1,b2='Y';
int d;

clrscr();
printf("******************** Welcome to this learning system ***************************");


do
{
printf("please enter k1,a1,k2:");
scanf("%f,%c,%f",&k1,&a1,&k2);
printf("please enter your answer:");
scanf("%f",&k3);
//***************************************************************************************************

switch(a1)
{
case '+':if(k3==(k1+k2)) d=1;
else
d=0;
break;
case '-':if(k3==(k1-k2)) d=1;
else
d=0;
break;
case '*':if(k3==(k1*k2)) d=1;
else
d=0;
break;
case '/':if(k2==0)
{
printf("input error!\n");
d=0;
break;
}
else
{
if(k3==(k1/k2)) d=1;
else
d=0;
}
break;

default: printf("input error!\n");

}

if(d)

{
printf("You are great!");
}
else
{
printf("please try again!");
}

printf("do you want to go on? (Y on N)\n");

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~下面的都不能执行了 为什么?????
scanf("%c",&b2);
}while((b2=='Y')||(b2=='y'));

}

程序可以执行到printf("do you want to go on? (Y on N)\n");

后面的scanf("%c",&b2);不能执行
搜索更多相关的解决方案: scanf  printf  please  

----------------解决方案--------------------------------------------------------
printf("do you want to go on? (Y on N)\n");

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~下面的都不能执行了 为什么?????
scanf("%c",&b2);
需要加上:fflush(stdin);
}while((b2=='Y')||(b2=='y'));

}

----------------解决方案--------------------------------------------------------
不可以呀 程序运行到 printf("do you want to go on? (Y on N)\n") 就自动关闭了 我在Turbo c3.0下写的

----------------解决方案--------------------------------------------------------
主要是你提示语句中的换行被scanf()接收了,前面加上getchar();试试
----------------解决方案--------------------------------------------------------

#include<stdio.h>
#include<dos.h>
main()
{
float k1,k2,k3;
char a1,b2='Y';
int d;

clrscr();
printf("******************** Welcome to this learning system ***************************");


do
{
printf("please enter k1,a1,k2:");
scanf("%f%c%f",&k1,&a1,&k2);
printf("please enter your answer:");
scanf("%f",&k3);
//***************************************************************************************************

switch(a1)
{
case '+':if(k3==(k1+k2)) d=1;
else
d=0;
break;
case '-':if(k3==(k1-k2)) d=1;
else
d=0;
break;
case '*':if(k3==(k1*k2)) d=1;
else
d=0;
break;
case '/':if(k2==0)
{
printf("input error!\n");
d=0;
break;
}
else
{
if(k3==(k1/k2)) d=1;
else
d=0;
}
break;

default: printf("input error!\n");

}

if(d)

{
printf("You are great!");
}
else
{
printf("please try again!");
}

printf("do you want to go on? (Y on N)\n");

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~下面的都不能执行了 为什么?????
getchar();
scanf("%c",&b2);
}while((b2=='Y')||(b2=='y'));

}


----------------解决方案--------------------------------------------------------
谢谢 楼上的 好了
对了 nuciewth 你收徒弟吗?


----------------解决方案--------------------------------------------------------
以下是引用kennyzhang在2006-9-8 12:04:08的发言:
谢谢 楼上的 好了
对了 nuciewth 你收徒弟吗?

我也学的不好,只是学的久点.我还没有出师
只要是论坛里的每一个我有能力回答的问题,我尽力回答.
有问题找大家,我们一定会帮你解决的.


----------------解决方案--------------------------------------------------------
[QUOTE]printf("do you want to go on? (Y on N)\n");
主要是你提示语句中的换行被scanf()接收了,前面加上getchar();[/QUOTE]

改是改对了,但是分析的原因不对.并不是提示语句中的换行被scanf()接受,你把那个换行去掉看看.它照样不行.
原因是scanf("%f",&k3);
输入数据后,会在缓冲区中留下一个回车.而被scanf("%c",&b2);接收了.
看下边这个例子,你运行一下就知道了:
#include "stdio.h"
int main()
{
char a,b;
printf("Input a:");
scanf("%c",&a);
printf("Input b:");
scanf("%c",&b);
printf("a=%d,b=%d\n",a,b);
return 0;
}

----------------解决方案--------------------------------------------------------
  相关解决方案