>int Prioritaet, i=1;j;
^
Sollte da nicht ein Komma hin? Komisch, ich hätte erwartet der Compiler
beschwert sich dort schon.
>for(int j=0;
^^^^
Nochmal?
Hallo
ja klar es müßte ein komma sein aber an dem liegt die Fehlermeldung
nicht!
auch mit Komma bekomme ich die Fehlermeldung
Wie müsste ich das j deklarieren und wo?
Gruß feldi
Hi,
also mal von vorn...was willst du denn mit:
temp[j] = '\0';
erreichen? Doch wohl, das \0 am Ende angehängt wird oder?
Das funktioniert so schonmal nicht, da hier das "j" nicht das "j" aus
der Schleife ist.
Ergo empfiehlt es sich, j global zu deklarieren und zu initialisieren,
nicht in der Schleife.
int Prioritaet, i=1;j;
wird dann zu
int Prioritaet, i=1, j=0;
und
for(int j=0; c[j] != '\0'; j++)
wird zu
for(; c[j] != '\0'; j++)
gruß
tobi
Hi,
wenn oben kein j deklariert wird, ist die Schleifenvariable j außerhalb
der Schleife nicht mehr gültig, das ist der Fehler
1
for(intj=0;c[j]!='\0';j++)
2
{
3
temp[j]=tolower(c[j]);//umwandeln in Kleinbuchstaben
4
}
5
temp[j]='\0';//HIER erscheint der dekelerationsfehler
Vielleicht wolltest Du das so schreiben ?
1
intj;// weiter oben
2
for(j=0;c[j]!='\0';j++)
3
{
4
temp[j]=tolower(c[j]);//umwandeln in Kleinbuchstaben
5
}
6
temp[j]='\0';//HIER erscheint der dekelerationsfehler
Wenn Du oben ein j hast und als Schleifenvariable, dann wäre das j
allerdings nicht mehr der Wert am Ende der Schleife, was es wohl sein
müsste, um den String zu terminieren.
Gruß
Hermann-Josef
Der Deklarationsfehler kommt nicht erst bei "temp[j] = '\0';" sondern
schon bei der Zeile "int Prioritaet, i=1;j;" - da steht nämlich ein
einzelner Ausdruck, der nur aus "j" besteht.
Der Compiler könnte hier eine Warnung der Art "Warning, statement has no
effect" oder sowas ausgeben, weil da eben ein Ausdruck ohne Effekt
steht.
(Mal abgesehen davon, dass zu diesem Zeitpunkt eben j noch nicht
deklariert ist...)
Viele Grüße,
Simon
Übrigens: Es kann sein, das der Compiler für das Statement
int Prioritaet, i=1;j;
keine Warnung ausgibt, zumindest beim gcc muss dafür imHo -Wall gesetzt
sein.
Hallo nochmals!
Also hier mal mein komplettes Programm!
Ich will eigentlich "Aufträge" von der Konsole einlesen und in eine
Liste ketten!
Durch Eingabe von STOP soll das Einlesen beendet werden!
Mein Problem in diesem Fall ja das das j aus der Schleife außerhalb der
schleife nicht mehr gültig ist!
Wie löse ich dies am besten?
Über Zeiger?
Ich hab so das Gefühl du machts dir das Leben schwer... Anfänger &&
Hausaufgabe?
Warum definierst du j nicht einfach ganz oben
1
intPrioritaet,i=1,j;
und lässt das "int" in der Schleife weg? Es ist imho sowieso wenig
sinnvoll Variablen mitten im Code zu definieren, erzeugt nur Fehler
(teils schwer nachvollziehbar).
Davon abgesehen: Das nächste mal ein paar Leerzeilen weniger bitte und
den Code besser als Anhang (Endung .c um die Syntaxvorhebung zu
aktivieren).
Und gaaaanz wichtig: Einrückungen usw. beachten. Dein Code ist ein
bisschen(!) chaotisch in dieser Hinsicht, sehr gut um Fehler zu
übersehen bzw. einzubauen.
feldi schrieb:> Mein Problem in diesem Fall ja das das j aus der Schleife außerhalb der> schleife nicht mehr gültig ist!
Dann definiere es außerhalb der Schleife!
Das hat Hermann-Josef scjon gestern um 21:07 geschrieben, sogar mit
Code.
DirkB schrieb:> Warum definierst du j nicht einfach ganz obenint Prioritaet, i=1, j;
habe ich schon versucht!
Mein problem ist mittlerweile auch nicht mehr das j sondern das ich aus
der do while schleife (mit STOP) nicht herauskomme!
wenn du das temp[j] = '\0';
in der Schleife machst, überschreibst du temp komplett mit 0.
Wenn du also an die letzte Position von temp eine 0 setzen willst,
brauchst du j außerhalb der Scheife - kannst es also nicht mit for(int
j=0; deklarieren... wie hier jetzt schon so oft gesagt wurde!
Eventuell solltest du mit einem einfacheren Programm beginnen...gute C
Kurse gibt es im Netz genug.
egberto schrieb:> Eventuell solltest du mit einem einfacheren Programm beginnen...gute C> Kurse gibt es im Netz genug.
Soll heissen: Du (feldi) übernimmst dich hier etwas. Stimmt meine
Vermutung "Anfänger && Hausaufgabe" ?
egberto schrieb:> wenn du das temp[j] = '\0';>> in der Schleife machst, überschreibst du temp komplett mit 0.>>>> Wenn du also an die letzte Position von temp eine 0 setzen willst,>> brauchst du j außerhalb der Scheife - kannst es also nicht mit for(int>> j=0; deklarieren... wie hier jetzt schon so oft gesagt wurde!
habe ich schon versucht, (siehe Anhang)
es funktioniert aber leider nicht!
Gruß Feldi
123gast schrieb:> egberto schrieb:>>> Eventuell solltest du mit einem einfacheren Programm beginnen...gute C>>> Kurse gibt es im Netz genug.>>>> Soll heissen: Du (feldi) übernimmst dich hier etwas. Stimmt meine>> Vermutung "Anfänger && Hausaufgabe" ?
Anfänger, ja! Hausaufgabe, nein ---> ÜBUNG
feldi schrieb:> Anfänger, ja! Hausaufgabe, nein ---> ÜBUNG
Ok, sollte auch kein Vorwurf sein. Immer hin hast du meine Hinweise
beachtet, der Code ist jetzt ordentlich formatiert und als Anhang
vorhanden.
Zum Problem:
>for(; c[j] != '\0'; j++)
ändern in
>for(j=0; c[j] != '\0'; j++)
Du musst dir im Klaren sein: Programmieren heisst "einen Algorithmus
finden um das gegebene Problem zu lösen", das Tippen des Quellcodes ist
nur ein ganz kleiner Teil. Bevor du drauf los programmierst überleg
dir wie DU (als Mensch) die Aufgabe lösen würdest, beschreibe es mit
Worten, teste deine Lösung mit Papier und Bleistift und - wenn alles
passt - "übersetze" die Lösung in die Programmiersprache deiner Wahl.
feldi schrieb:> Danke !
Gerne.
> War der Meinung dass ich dies schon versucht hatte...hab mich wohl> getäuscht!
Daraus entnehme ich dass du das "trial-and-error"-Prinzip anwendest.
Machen viele (Ich auch), aber: Bei größeren Projekten stößt man sehr
schnell an die Grenzen dieser Methode, da muss man vorher denken und
systematische Fehlersuche betreiben.
Ein Beispiel: Meine aktuelle (private) Bastelei hat jetzt schon
geschätzt 1500-2000 Zeilen Code (sehr wenig für ein Projekt). Wenn ich
da einen Bug suche komme ich nur mit Rumprobieren nicht mehr weit, da
muss man methodisch vorgehen und - das ist am besten - Fehler von vorne
herein so weit wie möglich durch saubere Programmierung ausschließen.
>Jetzt funktioniert es
Das war Sinn der Sache... Jetzt kommt der nächste Schritt: Wo lässt sich
noch was verbessern, optimieren usw. ? Vielleicht gibts noch ein paar
spezielle C++-Sachen die du nutzen kannst, das ist nicht mein Gebiet.