C langugage - "Komische" Zeichen in char[] output
Musste ich bauen Sie ein C-Programm, das convert infix-notation in postfix-notation mit Hilfe von STACK. Das ging auch ganz gut und es funktioniert in gewisser Weise. Es war lange her, als ich das Letzte mal genutzt C-Sprache, also bin ich wahrscheinlich nicht mit char [] - Variablen sehr gut.
Also problem ist, dass wenn ich Beiträge wie diese :
A+B*(C*E-D)
Mein Programm gibt diese :
ABCE*D-*+ĚĚĚĚĚĚĚĚĚĚĚ
So, wie Sie sehen, mein Programm hat postfix Konvertierung sehr gut, aber ich habe Haufen "Müll" chars auf mein Ergebnis (ĚĚĚĚĚĚĚĚĚĚĚ).
Hier ist der Ausschnitt aus meinem code (nur ein Teil, dass ich denke, dass ist nicht korrekt, vielleicht etwas mit char[] und Weg, wie ich assing Wert auf postfix[] variable:
int main()
{
char infix[20], postfix[20];
int len, tip, i, p=0;
STACK pom;
MAKE_NULL(&pom);
printf ("Unesi izraz.\n");
scanf ("%s", infix);
len = strlen(infix);
for(i=0; i<len; i++)
{
tip = nadi_tip(infix[i]);
if (tip == Lijeva)
{
PUSH (infix[i], &pom);
}
if (tip == Operand)
{
postfix[p] = infix[i];
p++;
}
if (tip == Desna)
{
while (!EMPTY(pom) && (TOP(pom)!= '('))
{
postfix[p++] = TOP(pom);
POP (&pom);
}
POP (&pom);
}
if (tip == Operator)
{
while (!EMPTY(pom) && TOP(pom)!= '(')
{
if(prioritet(infix[i]) <= prioritet(TOP(pom)))
{
postfix[p++] = TOP(pom);
POP (&pom);
}
else break;
}
PUSH(infix[i], &pom);
}
}
while (EMPTY(pom) != 1)
{
postfix[p++] = TOP(pom);
POP(&pom);
}
printf("Izlaz: %s", postfix);
return 0;
}
infix[] ist mein input-und postfix[] ist mein Ausgang. Was habe ich falsch gemacht ich, warum bin ich mit ĚĚĚĚĚĚĚĚĚĚĚ Zeichen. Vielen Dank im Voraus!
- Fühlt sich wie Sie fehlt ein null-terminator auf Ihre konvertierten string?
- Vielen Dank Euch allen!! Wenn ich könnte, würde ich markieren Sie alle Antworten als korrekt! Anfänger-Fehler von mir 🙂 ich habe vergessen, eine grundlegende Sache 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es sieht aus wie Sie nicht haben ein NUL-terminator auf Ihre
postfix
string. Sie können entweder ändern Sie die definition, umchar postfix[20] = {0};
oder Sie kurz vor derprintf
fügen Siepostfix[p] = '\0';
Müssen Sie NUL-kündigen
postfix
.Ein einfacher (aber etwas weniger effiziente) Methode initialisiert das array zu
{0}
oder zumemset
es zu0
.Sie nicht initialisieren diese, noch Anhängen von '\0' am Ende des Algorithmus.
Es nicht so aussieht, wie Ihr string ist null-terminiert.
Wie andere schon sagten, sollten Sie initialisieren das array.
Oder, jederzeit in das Programm, die Sie verwenden können,
Setzen wird, die alle Werte der array-Elemente auf null.
DU NICHT NULL BEENDEN, IHR SAITEN! Scherz. Hast du diese Meldung noch von den dreißig Leuten, die dir gesagt? Nur fügen Sie einige Informationen über den garbage Zeichen sind ein Versuch zu interpretieren, was passiert im Speicher über das Ende Ihrer
char[]
als chars. Es packt alle es können, was ist im Speicher, bis es auf einen null-Endzeichen und spuckt alles raus, und der Grund, warum es jedes mal die gleiche ist, dass Ihrchar[]
undĚĚĚĚĚĚĚĚĚĚĚ
zugeordnet neben einander, jedes mal, wenn das Programm ausgeführt wird. Wenn Sie bereits wusste, dass all dies, dann entschuldige ich mich für Ihre Zeit verschwenden mit anderen überflüssige Antwort.Meine Vermutung ist, dass Sie sind verwirrend Zeichen und der Zeiger auf strings.
Wo sind die Definitionen für POP() und PUSH() ? Was ist ndi_tip()
Warum gehst du nicht mit einem Schalter in der forloop, das ist wesentlich einfacher zu Lesen und zu verwalten.