IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> Преобразование в постфикстую запись
volvo
сообщение 19.12.2009 23:43
Сообщение #21


Гость






Очень похожая ошибка на то, что раньше описывалось в 19-м посте... Первое:
int main() // Стандарт С++ не позволяет функции main иметь тип void.
{
char* str;
char str9[100] = {0}; // Второе - инициализируй массив нулями, этого за тебя делать не должен никто
str=gets(str9);

Третье:
	/* после pассмотpения всего выpажения */
while(OPERS != NULL)
/* Пеpеписываем все опеpации из */
if (strchr(number, OPERS->c) != 0)
{
tmp2=TakeFunc(OPERS->c);
for (p=0; tmp2 && tmp2[p]!='\0';p++) // <--- !!! сначала надо убедиться, что tmp2 != NULL
{
outstring[i++]=tmp2[p];
}
outstring[i++]=' ';
Del(&OPERS);
}
и четвертое: компилятор был обязан предупредить тебя, что функция может НЕ возвращать значение. Меня компилятор предупредил ТРИЖДЫ (в трех разных функциях). Обращай внимание на эти предупреждения, иначе за их игнорирование можно очень дорого заплатить потом, при отладке и/или добавлении функционала.
 К началу страницы 
+ Ответить 
Krjuger
сообщение 20.12.2009 0:46
Сообщение #22


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Мне компилятор не выдал ниодной ошибки, ниодного предупреждения вообще,если не повериш на слово, могу скрин выложить..по поводу первого...этот зверски корявый ввод был лиш для того чтобы отладить данную часть программы,для меня важным было лиш то чтобы класс выполнял свою задачу.
Цитата
сначала надо убедиться, что tmp2 != NULL

А не лучше ли сделать чтобы TakeFunc если функция не найдена просто бы возвращало значение (OPERS->c),тобиш изменить ее вот так

char* PostWrite::TakeFunc(char a)
{
if (a=='1')
{
return "cos\0";
}
else
if (a=='2')
{
return "sin\0";
}
else
if (a=='3')
{
return "tg\0";
}
else
if (a=='4')
{
return "ctg\0";
}
else
if (a=='5')
{
return "ln\0";
}
else
if (a=='6')
{
return "lon\0";
}
else
if (a=='7')
{
return "sign\0";
}
else
if (a=='8')
{
return "exp\0";
}
else
return &a;
}


Однако,Теперь там в конце появились доселе неизвестные элементы,хотя зацикливания уже нет,в результате спасло,как раз то что ты сделал ранее.

if (strchr(number, a[k]) != 0)
/* пеpеписываем её в выходную стpоку */
{
while (strchr(number, a[k]) != 0 && a[k] != '\0')
{
outstring[i++]=a[k];
k=k+1;
}
outstring[i++]=' ';
if (a[k] == '\0') continue;//<----вот длягодаря этому все нормально вроде стало)



Да,еще я не могу найти где надо поставить пробел,потому что при примере a*10-b/2 получается результат "a 10 * b 2 /-" между делить и минусом отсутствует пробел,хотя он там должен быть.

Сообщение отредактировано: Krjuger - 20.12.2009 1:04
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 20.12.2009 3:35
Сообщение #23


Гость






Цитата
Мне компилятор не выдал ниодной ошибки, ниодного предупреждения вообще,если не повериш на слово, могу скрин выложить..
Скрин ничего не решает, все зависит от настроек среды и компилятора, я тоже могу отключить все предупреждения, и меня перестанут предупреждать... Однако я предпочитаю в опциях установить отображение всех Warning-ов, и пускай компилятор выявляет все подозрительные с его точки зрения места в программе.

Цитата
Да,еще я не могу найти где надо поставить пробел,потому что при примере a*10-b/2 получается результат "a 10 * b 2 /-" между делить и минусом отсутствует пробел,хотя он там должен быть.
Еще бы, с таким форматированием текста, ты что-нибудь мог найти...
	/* после pассмотpения всего выpажения */
while(OPERS != NULL)
/* Пеpеписываем все опеpации из */
if (strchr(number, OPERS->c) != 0)
{
tmp2=TakeFunc(OPERS->c);
for (p=0; tmp2 && tmp2[p]!='\0';p++)
{
outstring[i++]=tmp2[p];
}
outstring[i++]=' ';
Del(&OPERS);
}
else
{ // У тебя вот этих скобок не было, пробелы не ставились...
outstring[i++]=Del(&OPERS);
outstring[i++]=' ';
}
/* стека в выходную стpоку */
outstring[i]='\0';

/* и печатаем её */
printf("\n %s \n", outstring);
 К началу страницы 
+ Ответить 

2 страниц V < 1 2
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 22.07.2025 7:09
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"