如何在C语言程序中添加这个功能(输入Y\N继续或结束程序计算)现在写的程序计算后随便按下键盘会结束程序
#include<stdio.h>#include<ctype.h>#include<stdlib.h>chartoken[61];intn=0;voiderror(vo...
#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
char token[61];
int n=0;
void error(void)
{
printf("Error!\n");
exit(1);
}
void match(char expected)
{
if (token[n]==expected)
token[++n]=getchar();
else error();
}
double term(void);
double factor(void);
double exp(void)
{ double temp=term();
while((token[n]=='+')||(token[n]=='-'))
switch(token[n])
{
case'+':match('+');
temp+=term();
break;
case'-':match('-');
temp-=term();
break;
}
return temp;
}
double term(void)
{
double div;
double temp=factor();
while((token[n]=='*')||(token[n]=='/'))
switch(token[n])
{
case'*':match('*');
temp*=factor();
break;
case'/':match('/');
div=factor();
if(div==0) /*处理除数为零的情况*/
{
printf("The divisor is zero!\n");
exit(1);
}
temp/=div;
break;
}
return temp;
}
double factor(void)
{
double temp;
char number[61];
int i=0;
if(token[n]=='(')
{
match('(');
temp=exp();
match(')');
}
else if(isdigit(token[n])||token[n]=='.')
{
while(isdigit(token[n])||token[n]=='.') /*将字符串转换为浮点数*/
{
number[i++]=token[n++];
token[n]=getchar();
}
number[i]='\0';
temp=atof(number);
}
else error();
return temp;
}
main()
{
double result;
FILE *data=fopen("61590_4.dat","at");
if(data==NULL)
data=fopen("61590_4.dat","wt");
if(data==NULL)
return 0;
token[n]=getchar();
result=exp();
if(token[n]=='\n')
{
token[n]='\0';
printf("%s=%g\n",token,result);
fprintf(data,"%s=%g\n",token,result);
}
else error();
fclose(data);
return 0;
} 展开
#include<ctype.h>
#include<stdlib.h>
char token[61];
int n=0;
void error(void)
{
printf("Error!\n");
exit(1);
}
void match(char expected)
{
if (token[n]==expected)
token[++n]=getchar();
else error();
}
double term(void);
double factor(void);
double exp(void)
{ double temp=term();
while((token[n]=='+')||(token[n]=='-'))
switch(token[n])
{
case'+':match('+');
temp+=term();
break;
case'-':match('-');
temp-=term();
break;
}
return temp;
}
double term(void)
{
double div;
double temp=factor();
while((token[n]=='*')||(token[n]=='/'))
switch(token[n])
{
case'*':match('*');
temp*=factor();
break;
case'/':match('/');
div=factor();
if(div==0) /*处理除数为零的情况*/
{
printf("The divisor is zero!\n");
exit(1);
}
temp/=div;
break;
}
return temp;
}
double factor(void)
{
double temp;
char number[61];
int i=0;
if(token[n]=='(')
{
match('(');
temp=exp();
match(')');
}
else if(isdigit(token[n])||token[n]=='.')
{
while(isdigit(token[n])||token[n]=='.') /*将字符串转换为浮点数*/
{
number[i++]=token[n++];
token[n]=getchar();
}
number[i]='\0';
temp=atof(number);
}
else error();
return temp;
}
main()
{
double result;
FILE *data=fopen("61590_4.dat","at");
if(data==NULL)
data=fopen("61590_4.dat","wt");
if(data==NULL)
return 0;
token[n]=getchar();
result=exp();
if(token[n]=='\n')
{
token[n]='\0';
printf("%s=%g\n",token,result);
fprintf(data,"%s=%g\n",token,result);
}
else error();
fclose(data);
return 0;
} 展开
展开全部
我将main函数做了一些改动,加了一个char a用于接收用户输入的y或n,如果用户输入y,则清屏,然后用户可以开始进行算式输入,如果输入n则程序退出,如果输入其他字符无效。在用getch()函数时要添加一个头文件#include <conio.h>,之所以我用getch,是因为getch输入字符y或n后不用敲回车确定就可以,当然如果你想让用户输入y或n后再用回车确定的话,就把getch改成getchar就行了
void main()
{
double result;
char a;
FILE *data=fopen("61590_4.dat","at");
if(data==NULL)
data=fopen("61590_4.dat","wt");
if(data==NULL)
return;
NEXT:
token[n]=getchar();
result=exp();
if(token[n]=='\n')
{
token[n]='\0';
printf("%s=%g\n",token,result);
fprintf(data,"%s=%g\n",token,result);
}
else error();
printf("按Y继续,按N结束\n");
while(true)
{
a = getch();
if (a == 'y')
{
system("cls");
goto NEXT;
}
else if (a == 'n')
return;
}
fclose(data);
}
void main()
{
double result;
char a;
FILE *data=fopen("61590_4.dat","at");
if(data==NULL)
data=fopen("61590_4.dat","wt");
if(data==NULL)
return;
NEXT:
token[n]=getchar();
result=exp();
if(token[n]=='\n')
{
token[n]='\0';
printf("%s=%g\n",token,result);
fprintf(data,"%s=%g\n",token,result);
}
else error();
printf("按Y继续,按N结束\n");
while(true)
{
a = getch();
if (a == 'y')
{
system("cls");
goto NEXT;
}
else if (a == 'n')
return;
}
fclose(data);
}
展开全部
你好!
在大循环外加一个标识变量
用do-while(flag)
flag为标准变量
用来判断是否继续
希望对你有所帮助,望采纳。
在大循环外加一个标识变量
用do-while(flag)
flag为标准变量
用来判断是否继续
希望对你有所帮助,望采纳。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在大循环外加一个标识变量 用do-while(flag) flag为标准变量 用来判断是否继续
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询