Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.07.2013, 13:40   #1
Sv.
Пользователь
 
Регистрация: 01.11.2012
Сообщений: 48
По умолчанию не могу понять, в чем ошибка

переводит выражение из постфиксной формы в инфиксную. помогите пожалуйста исправить ошибку

Код:
#include <vcl.h>
#pragma hdrstop
#include <string.h>

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------

enum optype {power = 3, devide = 2, multiply = 2, minus = 1, plus = 1, null=0};

struct stack {
    char val[100];
    optype type;
    stack * next;
} *head;

void push(char[], optype);
void push(stack *);
stack * pop();

__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void push(stack *t) {
    t->next = head;
    head = t;
}

void push(char str[], optype type) {
    stack *t;
    t = new stack;
    strcpy(t->val, str);
    t->type = type;
    t->next = head;
    head = t;
}

stack * pop() {
    stack *t;
    if(head == NULL) return NULL;
    t = head;
    head = t->next;
    return t;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{

char c, temp[30], s[30],sv[30];
    int p_temp=0;
    int i;
    stack *h1, *h2;
    optype type;
    head = NULL;
strncpy(s, Edit1->Text.c_str(), 14);
    while(s[i]!='\0') {                                           //здесь ошибка
        c = s[i];
        if(c>='0' && c<='9' || c=='.') {
            temp[p_temp++] = c;
            temp[p_temp] = '\0';
        } else if(c==' ') {
            if(p_temp!=0) {
                push(temp, null);
                p_temp=0; }
            temp[0] = '\0';
        } else if(c=='+' || c=='-'|| c=='*' || c=='/' || c=='^') {
            h1 = pop();
            h2 = pop();

            if(c=='+') type = plus;
            else if(c=='-') type = minus;
            else if(c=='*') type = multiply;
            else if(c=='/') type = devide;
            else if(c=='^') type = power;
            if(h2->type!=null && h2->type<type) {
                temp[0]='('; temp[1] = '\0';
                h2->val[strlen(h2->val)+2] = '\0';
                h2->val[strlen(h2->val)+1] = c;
                h2->val[strlen(h2->val)] = ')';
            } else {
                h2->val[strlen(h2->val)+1] = '\0';
                h2->val[strlen(h2->val)] = c;
            }
            strcat(temp, h2->val);
            if(h1->type!=null && h1->type<type) {
                strcat(temp, "(");
                h1->val[strlen(h1->val)+1] = '\0';
                h1->val[strlen(h1->val)] = ')';
            }
            strcat(temp, h1->val);
            strcpy(h2->val, temp);
            delete h1;
            h2->type = type;
            push(h2);
        }
        i++;
    }
    strcpy(sv, (pop())->val);
    for(i=0;i<10;i++)
    Edit2->Text=Edit2->Text + sv[i];
}
Sv. вне форума Ответить с цитированием
Старый 14.07.2013, 14:59   #2
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Код:
strncpy(s, Edit1->Text.c_str(), 14);
Вы уверены, что копируете в char* s символы вместе с нультерминатором ('\0')?
Проверьте, что строка s у вас нультерминирована.
Код:
strncpy(s, Edit1->Text.c_str(), strlen(Edit1->Text.c_str()) + 1);
Igor95 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не могу понять, в чем ошибка Sv. Общие вопросы C/C++ 8 01.11.2012 18:07
не могу понять в чем ошибка 6002theJuicy Visual C++ 4 23.05.2012 15:19
в чем ошибка? не могу понять... lexflax C++ Builder 1 28.01.2012 15:35
Не могу понять в чем ошибка.... Blonde Помощь студентам 0 21.05.2011 14:19
Не могу понять, в чем ошибка FlashProStar Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 01.12.2010 12:20