我有问题。我希望我的程序计算数字。我需要输入多行,然后在 CTRL + Z 之后评估所有行。但相反,它只适用于第一行。我也除以零。不知道什么时候我应该在输入0时制作一个if statmet来停止程序。
的main.c
#include <stdio.h>
#include "evalexpression.h"
int main() {
char string[100];
int result;
while(fgets(string, sizeof(string),stdin))
{
result = InterCalc(string, sizeof(string));
Calc(result, string);
}
return 0;
}
tols.c
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <float.h>
#include "evalexpression.h"
static float f1, f2;
static char op;
int isValidExpression(const char *str)
{
int res;
char ops[10];
while()
res=sscanf(str, "%f %s %f", &f1, ops, &f2);
if (res==3) {
if (ops[0]=='+' || ops[0]=='-' || ops[0]=='^' || ops[0]=='*' || ops[0]=='/')
{
op=ops[0];
return 1;
}
else return 0;
}
else return 0;
}
int getOperator()
{
return(op);
}
float getFstOperand()
{
return(f1);
}
float getSecOperand()
{
return(f2);
}
float getExprValue() {
switch (getOperator()) {
case '+':
return getFstOperand() + getSecOperand();
case '-':
return getFstOperand() - getSecOperand();
case '/':
return getFstOperand() / getSecOperand();
case '*':
return getFstOperand() * getSecOperand();
case '^':
return pow(getFstOperand(), getSecOperand());
default:
return 0;
}
}
int InterCalc(char *my_string, int size) {
if (fgets(my_string, size, stdin) == NULL || strcmp(my_string, "exit\n") == 0) {
printf("Program ended\n");
return 0;
} else
if (isValidExpression(my_string) == 0) {
printf("Expression error\n");
return 0;
} else {
return 1;
}
}
void Calc(int a, char *str)
{
float calculation_value;
if (a==1) {
calculation_value = getExprValue();
printf("The result of %s is %f\n", str, calculation_value);
}
}