Hallo zusammen, ich verstehe hier den Grund der Warnung nicht. Kann mir
jemand weiterhelfen? Es ist vllt nicht der schönste Code, aber er
funktioniert und alle Variablen werden benötigt.
(Code wurde zur besseren Visualisierung als Bild gepostet)
Danke :)
(prx) A. K. schrieb:> Domenik schrieb:>> aber er funktioniert>> Auch dann noch, wenn der jeweils gewünschte Buchstabe überhaupt nicht> vorkommt?
Ich gehe einfach von einer fehlerfreien Übertragung aus 😁. Aber habe
noch einen CRC in der aufrufenden Funktion.
loeti2 schrieb:> Achso dein for(i; ...) wird wohl die Ursache sein.> Schreib lieber for(; ...)
Verdammt, das war's 🙈🙈🙈. Ich habe echt lange überlegt. Danke
loeti2 schrieb:> Die komplette Ausgabe der Warnings ist leider nicht lesbar.
Die komplette GCC Ausgabe wird von der IDE leider überschrieben, wenn
erfolgreich kompiliert wird. D.h. um die GCC-Ausgabe anzuzeigen, muss
man einen Fehler einbauen.
Domenik schrieb:> Es ist vllt nicht der schönste Code
Ja, vor allem wenn man den Schleifenzähler innerhalb der
Schleife noch wild verändert. Voll übersichtlich und
überhaupt nicht fehleranfällig ..... oder vielleicht doch?
OMG schrieb:> Ja, vor allem wenn man den Schleifenzähler innerhalb der> Schleife noch wild verändert.
Wird er doch gar nicht.
Wird nur im Kopf der Schleifen geändert.
Wie es sich gehört.
Eigentlich ist es egal ob man einen Parser mir goto oder break baut.
Man nimmt hat das, was einem besser liegt.
Natürlich gibts auch andere Methoden.
Aber wirklich schöner wirds damit auch nicht.
Die vorgefertigten strtok(), sscanf() und ihre Geschwister könnte man
natürlich auch verwenden.
Domenik schrieb:> (prx) A. K. schrieb:>> Domenik schrieb:>>> aber er funktioniert>>>> Auch dann noch, wenn der jeweils gewünschte Buchstabe überhaupt nicht>> vorkommt?>> Ich gehe einfach von einer fehlerfreien Übertragung aus 😁. Aber habe> noch einen CRC in der aufrufenden Funktion.
Das hilft dir nicht. Stefan hat das schon verstanden:
Stefan ⛄ F. schrieb:> Wie oft wird eigentlich eine for-Schleife ohne Bedingung wiederholt?>> for (i; ; i++)
Ich würde dir generell empfehlen, die Syntax einer for-Schleife noch
einmal genau nachzulesen. Das hätte dir vermutlich auch die
Ausgangsfrage beantwortet: i als Statement hat keinen Effekt. Tut nix.
Egal ob mitten im Code:
1
inti=0;
2
i++;
3
i;
Oder eben wie bei dir an erster Stelle im Schleifenkopf.
Und im Übrigen gibt es für deine Aufgabe auch bereits
Bibliotheksfunktionen wie strchr / strstr, die den Code lesbarer machen
und dir dumme Fehler beim Implementieren ersparen können.
MfG, Arno
Stefan ⛄ F. schrieb:> Wie oft wird eigentlich eine for-Schleife ohne Bedingung wiederholt?>> for (i; ; i++)
for(;;) ist eine Endlosschleife, das würde dir auch dein C oder C++
Grundlagenbuch berichten.
Btw, das Gehampel mit tmpStr ist unnötig (und falsch) - atoi hört eh
beim ersten nicht-Ziffer-Zeichen auf ...
Und "index" ohne Prüfung benutzen schreit nach Speicherfehler.
EAF schrieb:> for(;;) ist eine Endlosschleife, das würde dir auch dein C oder C++> Grundlagenbuch berichten.
Wollte ich auch gerade schreiben
for(i; "unbekannte bedingung"; i++) kann nicht funktionieren
Moin,
Anselm schrieb:> for(i; "unbekannte bedingung"; i++) kann nicht funktionieren
Doch, natuerlich "funktioniert" das. Man darf sich halt nicht wundern.
Ist bestimmt wieder dieses boese C dran schuld. Wenn der Bauer nicht
schwimmen kann, liegts an der Badehose.
SCNR,
WK
Anselm schrieb:> for(i; "unbekannte bedingung"; i++) kann nicht funktionieren
Das ist keine "unbekannte bedingung" sondern eine "leere bedingung"
Und damit gültiges C oder C++.
Das funktioniert wie im Grundlagenbuch beschrieben.
Bedenke:
Die Entscheidung wird im Schleifenkörper getroffen und dieser ggf. mit
break verlassen.
Also alles im grünen Bereich, vielleicht nicht schön, aber von der Seite
her ok.
EAF schrieb:> Bedenke:> Die Entscheidung wird im Schleifenkörper getroffen und dieser ggf. mit> break verlassen.
Oder auch nicht, wie schon oben beschrieben:
(prx) A. K. schrieb:> Auch dann noch, wenn der jeweils gewünschte Buchstabe überhaupt nicht> vorkommt?
MfG, Arno
Dergute W. schrieb:> Moin,>> Anselm schrieb:>> for(i; "unbekannte bedingung"; i++) kann nicht funktionieren>> Doch, natuerlich "funktioniert" das. Man darf sich halt nicht wundern.> Ist bestimmt wieder dieses boese C dran schuld. Wenn der Bauer nicht> schwimmen kann, liegts an der Badehose.
In jeder "normalen" Sprache wird ein FOR ohne Next oder anderweitige
Bedingung sofort mit Husten und Spucken des Compilers beantwortet. Weil
das Unfaug ist.
C an sich ist aber noch größerer Unfug, wenn es solche Konstrukte ohne
Murren zuläßt.
Großes Zeh Buch schrieb:> C an sich ist aber noch größerer Unfug, wenn es solche Konstrukte ohne> Murren zuläßt.
Du musst die knappe Syntax von C nicht mögen, aber wenn du C nutzt,
solltest du die Sprache zumindest kennen. Ein for(;;) als Dauerschleife
war von Anfang an ausdrücklich vorgesehen und ist ganz offen
dokumentiert.
(prx) A. K. schrieb:> Du musst die knappe Syntax von C nicht mögen, aber wenn du C nutzt,> solltest du die Sprache zumindest kennen. Ein for(;;) als Dauerschleife> war von Anfang an ausdrücklich vorgesehen und ist ganz offen> dokumentiert.
Ich mag nicht nur die knappe Syntax nicht, ich mag C als Ganzes nicht.
Deshalb nutze ich es auch nicht, weil ich auf Fußangeln und
Stolperfallen gut verzichten kann.
In der allergrößten Not würde ich ein While(1) vorziehen.
Großes Zeh Buch schrieb:> Ich mag nicht nur die knappe Syntax nicht, ich mag C als Ganzes nicht
Das sei dir unbenommen. Nur warum denkst du dann, dieser Kommentar wäre
in irgendeiner Weise nützlich in diesem Thread?
Das Fehlen der Bedingung im For-Kopf heißt – was würde man auch anderes
erwarten – "bedingungslos". Somit läuft die Schleife so lange, bis sie
anderweitig (bspw. durch break) abgebrochen wird.
Großes Zeh Buch schrieb:> In jeder "normalen" Sprache wird ein FOR ohne Next
Next gibt es nur in Basic und verwandten Sprachen. Wenn du nur diese als
normale Sprachen ansiehst, ist dein Teller eine Suppenschüssel mit
Deckel :)
> oder anderweitige Bedingung
Next ist keine Bedingung, sondern lediglich die Markierung des
Schleifenendes.
> sofort mit Husten und Spucken des Compilers beantwortet.
Wenn mich der Compiler anhusten oder gar anspucken würde, würde ich aber
sofort zurückspucken. Er hat mich gefälligst freundlich auf meine
Fehler hinzuweisen ;-)
Yalu X. schrieb:> Das Fehlen der Bedingung im For-Kopf heißt – was würde man auch anderes> erwarten – "bedingungslos". Somit läuft die Schleife so lange, bis sie> anderweitig (bspw. durch break) abgebrochen wird.
So ist es. Der Schwachsinn bei C ist halt nur, das ein Konstrukt, was
dazu prädestiniert ist, eie abzählbare Anzahl von Iterationen zu
liefern, auch mißbraucht werden kann, um eine unbegrenzte Anzahl von
Iterationen auszuführen. Das ist nicht sehr logisch, insbesondere nicht
unter den Aspekt, dass mit while() ja ein viel besser geeignetes
Konstrukt zur Verfügung steht, bei dem man die Intention LESBAR
angeben muss.
Aber klar, logisch ist C ja sowieso nicht.
> Next gibt es nur in Basic und verwandten Sprachen. Wenn du nur diese als> normale Sprachen ansiehst, ist dein Teller eine Suppenschüssel mit> Deckel :)
Mein Gott, häng' dich jetzt nicht an konkreten Schlüsselwörtern
konkreter Sprachen auf. Die sind doch Wurscht. Es geht um die Intention
einer Kontrollstruktur. Und um die Restriktionen, die die verfickte
Sprache anwendet, um die intentionsgerechete Verwendung sicher zu
stellen.
Und da kackt C einfach mal ganz fürchterlich ab.
Norbert schrieb:> for( hier sind meine Start-Bedingungen;> hier sind meine Ende-Bedingungen;> tue unbedingt dies bei jedem Durchgang )> Finde ich persönlich jetzt gar nicht mal so schlecht.> Ist aber sicherlich Geschmackssache.
Das ist ja auch die vollkommen normale Verwendung. Darum geht es aber
hier nicht.
c-hater schrieb:> insbesondere nicht> unter den Aspekt, dass mit while() ja ein viel besser geeignetes> Konstrukt zur Verfügung steht,
Ist das wirklich in diesem Fall auch so?
Mir scheint beides nicht so gelungen:
1
while(1)
2
{
3
//hier tu das eine
4
if(bedingung)break;
5
//hier tu noch was anderes
6
i++;
7
}
8
9
for(;;i++)
10
{
11
//hier tu das eine
12
if(bedingung)break;
13
//hier tu noch was anderes
14
}
Die for Variante spart immerhin ein paar Tastendrücke ein
(wenn man denn darauf Wert legt)
Schauspieler-Entdecker schrieb:> Norbert schrieb:>> for( hier sind meine Start-Bedingungen;>> hier sind meine Ende-Bedingungen;>> tue unbedingt dies bei jedem Durchgang )>> Finde ich persönlich jetzt gar nicht mal so schlecht.>> Ist aber sicherlich Geschmackssache.>> Das ist ja auch die vollkommen normale Verwendung. Darum geht es aber> hier nicht.
Hmmm, ist das so?
EAF schrieb:> Mir scheint beides nicht so gelungen:> while(1)> {> i++;> }>> for(;;i++)> {> }> Die for Variante spart immerhin ein paar Tastendrücke ein> (wenn man denn darauf Wert legt)
Na ja, spätestens wenn irgendwo im Rumpf ein continue an ungünstiger
Stelle vorkommt, könnte es sich als nützlich erweisen trotzdem
bedingungslos i zu inkrementieren (wenn man es denn will)
Ich wäre demnach für Version 2.
Ob diese Empfehlung für Programmierung in einer als geschwätzig
bekannten Sprache wohl Gefallen findet? Immerhin kann keinerlei Zweifel
aufkommen, was damit gemeint ist:
(prx) A. K. schrieb:> Ob diese Empfehlung für Programmierung in einer als geschwätzig> bekannten Sprache wohl Gefallen findet? Immerhin kann keinerlei Zweifel> aufkommen, was damit gemeint ist:PERFORM UNTIL 1 < 0> DISPLAY "Something"> END-PERFORM> https://programming-idioms.org/idiom/50/make-an-infinite-loop/3307/cobol
Manche Leute ekeln sich aber auch vor gar nichts! ;-)
Mit C, C++ und Java Unzufriedene, einschliesslich des alten Hasens Ken
Thompson, haben bei Google eine Sprache "Go" definiert. Und dabei völlig
zurecht erkannt, dass for(;;) an sich der richtige Ansatz ist, aber viel
zu umständlich:
(prx) A. K. schrieb:> Und dabei völlig> zurecht erkannt, dass for(;;) an sich der richtige Ansatz ist, aber viel> zu umständlich:
[...]
Nö. Das ist so ziemlich die schlimmste Perversion, die dieser
Kontrollstruktur wiederfahren konnte...
Mehr als sinnentleert, vollkommen sinnwidrig.
c-hater schrieb:> Mehr als sinnentleert, vollkommen sinnwidrig.
Fein, dass du dir selber die Deutungshoheit zuteilst.
Das klappt aber nur in deinem kleinen Innenweltuniversum.
Norbert schrieb:> Besser so? ;-)
Grundsätzlich sind Strukturen/Verfahren mit Goto keine unbedingt
schlechte Idee im Parserbau.
Wobei ich die Beschränkung auf Vorwärtssprünge empfehlen würde. Das
wirkt der Spagettifizierung deutlich entgegen.
Ach da gibt's so Einiges bei dem ich nicht sicher bin ob's vielleicht
doch nur ein fürchterlich missglückter Scherz war.
Zum Beispiel als ein paar betrunkene Mauer zusammen saßen und einer
sagte ›Halt mal mein Bier‹
Und die anderen meinten: Das traust du dich nicht!
Na und mit der PHP-Schweinerei müssen nun alle leben.