1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным.
В описании темы указываем язык!!!
if (strchr("(", Input[i]) != 0) { Stat = 1; Vloj++; break; } else
if (strchr("", Input[i]) != 0) { Result(2); return; } else
if (strchr(".", Input[i]) != 0) { Result(5); break; } else { Result(3, &Input[i]); return; } } } if (Input[i] == '\0') { switch(Stat){ case 1: Result(1); break; case 2: Result(0); break; case 3: tmp[j++]='\0';
if (strstr(func,tmp) != 0) { Result(5, tmp); } else Result(0); break; case 4: Result(0); break; case 5: Result(0); break; case 6: Result(5, tmp); break; } } }
void main()//пример чисто символический,потмоу чт все равно проект не проходит даже сборку { Analiz m1; m1.Input="x+1/2"; printf("/n %s /n",m1.Output); }
В отладчике выдается 2 ошибки: 1.error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup MSVCRTD.lib 2.fatal error LNK1120: 1 unresolved externals
class Analiz { private: int Stat; int Vloj; public: char *Input; char *Output; Analiz(char *input); int Error; int Result(int err, char const *tmp = '\0');
};
int Analiz::Result(int err, char const *tmp) { char *temp; switch (err) { case 0: temp = "Верно 0"; break; case 1: temp = "Пропущен операнд 1"; break; case 2: temp = "Неверно расставлены скобки 2"; break; case 3: temp = "Неверный символ 3 ", strcat(temp, tmp);break; case 4: temp = "Пропущен оператор 4 ";break; case 5: temp = "Не заданы параметры функции 5";strcat(temp,tmp); break; case 6: temp = "Неизвестная функция 6 ",strcat(temp,tmp);break; case 7: temp = "Неверное имя 7 ", strcat(temp,tmp);break; case 8: temp = "Неверная константа 8 ", strcat(temp, tmp);break; } Output = temp; return Error = err; }
Analiz::Analiz(char *input) { int i; int j = 0; Stat=1; Error = 0; const char number[] = " 0123456789"; const char liter[] = " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; const char znak[] = " -*/+"; const char func[] = "cos sin tg ctg ln log sign exp"; char tmp[100]; Input=input; // *tmp=NULL; for (i = 0; Input[i] != '\0'; i++) { switch (Stat) { case 0: break; case 1:
if (strchr(number, Input[i]) != 0) { Stat=4; break; } else
if (strchr(" ", Input[i]) != 0) { //tmp[j++]='\0'; if (strstr(func,tmp) != 0) { Stat = 6; } else { Stat = 2; } *tmp=NULL; j=0; break; } else
if (strchr(znak, Input[i]) != 0) { tmp[j++]='\0'; if (strstr(func,tmp) != 0) //вот здесь впесто того чтобы пропустить прога переходит к Result(5, tmp),хотя не должна этого делать. { Result(5, tmp);// return; } else { Stat = 1; *tmp=NULL; j=0; } break;
} else
if (strchr("(", Input[i]) != 0) { tmp[j++]='\0'; if (strstr(func,tmp) != 0) { Stat = 1; *tmp=NULL; j=0; } else { Result(6, tmp); return; } Vloj++; break; } else
if (strchr(")", Input[i]) != 0) { tmp[j++]='\0'; if (strstr(func,tmp) != 0) { Result(2); return; } else { Stat = 2; *tmp=NULL; j=0; Vloj--; } break; } else
При использовании данного примера проиходит ошибка,проблема в том что именованое пространство func как то неверно сравнивается с моим текущим значением tmp...