#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);不能执行
----------------解决方案--------------------------------------------------------
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 你收徒弟吗?
----------------解决方案--------------------------------------------------------
谢谢 楼上的 好了
对了 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;
}
----------------解决方案--------------------------------------------------------