Использование strtok для хранения простого уравнения в массиве, а затем выполнить операцию? - PullRequest
0 голосов
/ 09 февраля 2019

Я пытаюсь использовать strtok, чтобы разбить простое уравнение, такое как 5 + 4, и сохранить каждую часть в массив, и, как только я это сделаю, выполните указанную операцию.

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
//#include "stdafx.h"

int main() {
    char uin[10], op[10], error = 'e';
    char *token;
    const char s[2] = " ";
    double num1, num2, fNum1, res;
    int i = 0;
    int x, y, z, a, b, c, op1;

    printf("Welcome to the calculator, please enter an equation\n");

    while (error == 'e') { // & assigns address and * gives access to what it points to
        a = &uin[0];
        b = &uin[2];
        c = &uin[4];

        gets(uin);
        rewind(stdin);
        printf("Is this what you entered? %s\n", uin);
        token = strtok(uin, s);
        //x = &token;
        //printf("The element in the array currently assigned to token is: %s\n", token);

        while (token != NULL) {
            if (isdigit(token[0])) {
                num1 = atof(token);
                printf("token is now: %1.2f\n", num1);
            } else
                strcpy(op, token);

            token = strtok(NULL, s);
            if (isdigit(token[0])) {
                num1 = atof(token);
            } else
                strcpy(op, token);

            //token = strtok(NULL, s);
            //y = &token;
            //printf("The element in the array currently assigned to token is: %s\n", token);
        }

        //token = strtok(NULL, s);
        //y = &token;
        //printf("The element in the array currently assigned to token is: %s\n", token);

        //token = strtok(NULL, s);
        //z = &token;
        //printf("The element in the array currently assigned to token is: %s\n", token);

    }

    system("pause");
}

Мне действительно тяжело с этим.Я думаю, что я правильно использую strtok, чтобы взять первую часть gets(uin) и сохранить ее, но я не понимаю, как взять среднюю часть (+ - * или /) и сохраните его.

1 Ответ

0 голосов
/ 10 февраля 2019

strtok не подходит для ваших целей.strtok изменяет строку, перезаписывая разделитель.Это будет работать только для выражений, в которых все токены разделены пробелами, что является ненужным и противоречивым ограничением.Для более эффективного подхода либо используйте указатель и явные тесты для каждого символа, либо используйте неинтрузивные помощники синтаксического анализа, такие как strspn(), strcspn() и strtold().

Кроме того, вы не должны использовать gets() эта функция устарела и была удалена из последней версии стандарта C.Его нельзя использовать безопасно: любой достаточно большой ввод повредит вашу программу и будет иметь неопределенное поведение.Вместо этого используйте fgets(), чтобы прочитать полную строку в достаточно большой массив: 10 байтов определенно слишком малы.rewind() также не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...