程序只读2行

时间:2016-12-15 17:32:57

标签: c for-loop while-loop

我有问题。我希望我的程序计算数字。我需要输入多行,然后在 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);
        }
}

0 个答案:

没有答案