Funktion für nur Zahlen und nur Buchstaben
-
Hier ist eine kommentierte Fassung dieses simplen C Codes, den volkard nicht verstanden hat:
#include <stdio.h> int readnum( int* result ) { int v = 0; /* wert */ int s = 1; /* vorzeichen: 1 = +, -1 = - */ int k = 0; /* ok; 0 = falsch, 1 = wahr */ int c = getchar(); /* lies erstes Zeichen */ /* lies bis entweder EOF, LF, -, oder 0..9 auftaucht */ while ( c != EOF && c != '\n' && c != '-' && ( c < '0' || c > '9' ) ) { c = getchar(); } /* wurde ein - gefunden, setze das Vorzeichen auf negativ. */ if ( c == '-' ) { s = -1; c = getchar(); } /* lies Ziffern (falls vorhanden) */ while ( c >= '0' && c <= '9' ) { /* multipliziere Wert mit 10 und addiere Nominalwert der Ziffer. * Anschliessend, lies naechstes Zeichen */ v = v * 10 + ( c - '0' ); c = getchar(); /* setze "ok" auf 1; Wert enthaelt Ziffern */ k = 1; } /* lies bis Zeilen- oder Dateiende */ while ( c != EOF && c != '\n' ) c = getchar(); /* Ist der Wert in Ordnung, setze Ergebnis mit Vorzeichen */ if ( k ) *result = v * s; /* kehre zurueck */ return k; } int main( int argc, char** argv ) { int w; for (;;) { /* Endlosschleife bis Abbruchbedingung */ int nflds; printf( "Watt eingeben (Ganze Zahl): " ); if ( !readnum(&w) ) { /* Benutzer hat keine Ganzzahl eingegeben */ printf( "\nHaeh?! Was soll das darstellen? Gib doch eine Ganzzahl ein!\n" ); /* Benutzereingabe wiederholen */ continue; } /* Wert erhalten; Benutzereingabe abbrechen */ break; } /* Wert ausgeben */ printf( "\nWatt = %d\n", w ); /* Sichtkontrolle */ return 0; }
Ich hoffe, volkard, dass bei Dir jetzt die Lichter angehen. Fuer jemanden, der andere belehrt, solltest Du wirklich solchen Code lesen koennen (noch dazu als Verfechter der Null-Kommentar-Ideologie, nach der jemand, der einen Source nicht lesen kann, die entsprechende Programmiersprache nicht kann).
-
Power Off schrieb:
Hier ist eine kommentierte Fassung dieses simplen C Codes
lol. die kommentare hättest du dir auch sparen können. was die einzelnen anweisungen machen, ist schon klar.
noch dazu als Verfechter der Null-Kommentar-Ideologie, nach der jemand, der einen Source nicht lesen kann, die entsprechende Programmiersprache nicht kann).
ich vertrete, daß man code vereinfachen soll statt ihn zu kommentieren.
also deine kommentare haben nix gebracht.diesen code halte ich für sehr schlecht lesbar.
int main( int argc, char** argv ) { int w; for (;;) { /* Endlosschleife bis Abbruchbedingung */ int nflds; printf( "Watt eingeben (Ganze Zahl): " ); if ( !readnum(&w) ) { /* Benutzer hat keine Ganzzahl eingegeben */ printf( "\nHaeh?! Was soll das darstellen? Gib doch eine Ganzzahl ein!\n" ); /* Benutzereingabe wiederholen */ continue; } /* Wert erhalten; Benutzereingabe abbrechen */ break; } /* Wert ausgeben */ printf( "\nWatt = %d\n", w ); /* Sichtkontrolle */ return 0; }
und diesen kann ich besser lesen
int main() { int w; printf( "Watt eingeben (Ganze Zahl): " ); while( !readnum(&w) ) printf( "\nHaeh?! Was soll das darstellen? Gib doch eine Ganzzahl ein!\n" ); printf( "\nWatt = %d\n", w ); return 0; }
kann auch sein, daß ich einen schrecklichen fehler mache, aber bewirken die beiden programme nicht das gleiche? falls ja, warum hast du for, break und continue verwendet statt einfach while? ist das mit for in deinen augen besserer code?
-
Au weia. Immernoch nicht gemerkt, dass die while Schleife von volkard dasselbe macht? Dabei kürzer und übersichtlicher als dein for-if-continue-break Geraffel ist?
Und deine Kommentare mit /**/ sind auch schlimm. Zum auskommentieren von ganzen Blöcken nimmst du dann ernsthaft // für jede Zeile?
Edit: Zu spät
-
TactX schrieb:
Au weia. Immernoch nicht gemerkt, dass die while Schleife von volkard dasselbe macht? Dabei kürzer und übersichtlicher als dein for-if-continue-break Geraffel ist?
Und deine Kommentare mit /**/ sind auch schlimm. Zum auskommentieren von ganzen Blöcken nimmst du dann ernsthaft // für jede Zeile?
Edit: Zu spät
Das ist doch völlig egal, welchen Schleifentyp ich da verwende.
Und die Standard-C Kommentare verwende ich grundsätzlich immer in C, weil es immer noch Compiler gibt, die in C keine Zeilenkommentare lesen können (warum auch immer, da sie js schon lange im Standard drin sind).
Ihr solltet echt mal real-world C-Code sehen. Dagegen ist mein Code extrem sauber und aufgeräumt, und auch leicht lesbar.
Klugscheißer gibt's überall.
-
Power Off schrieb:
Das ist doch völlig egal, welchen Schleifentyp ich da verwende.
Dir kann es ja egal sein, aber schonmal drüber nachgedacht, dass jemand der hier eine Frage stellt lernen will wie man es richtig macht? Mir scheint du willst nicht die Grundlagen beherrschen weil man ja alles auch irgendwie anders hinfummeln kann. Es gibt aber noch mehr Leute die denken wie du: klick
Power Off schrieb:
Ihr solltet echt mal real-world C-Code sehen. Dagegen ist mein Code extrem sauber und aufgeräumt, und auch leicht lesbar.
DAS ist ja ein Totschlagargument: "Bühääää, die anderen machen aber auch scheiße..."
-
Walli schrieb:
Power Off schrieb:
Das ist doch völlig egal, welchen Schleifentyp ich da verwende.
Dir kann es ja egal sein, aber schonmal drüber nachgedacht, dass jemand der hier eine Frage stellt lernen will wie man es richtig macht? Mir scheint du willst nicht die Grundlagen beherrschen weil man ja alles auch irgendwie anders hinfummeln kann.
Ich weiß gar nicht, was ihr habt, die Funktion ist auch mit dem break und continue doch sofort zu verstehen.
-
Ein while ist hier kürzer, eleganter und erzeugt semantisch identischen Code, also nenn mir einen guten Grund es nicht zu benutzen.
-
also ob ne funktion 50 denkschmerzen braucht oder 100, ist für mich ein riesenunterschied. und das ist ja nur die einfache, die ich umgestaltet habe. die schlimme mit den 2500 denkschmerzen ist der eigentliche kracher. die habe ich aber nicht umgestaltet, weil das kleine beispiel sogar noch treffender zeigt, was mir am großen nicht gefällt.
Daniel E. schrieb:
Ich weiß gar nicht, was ihr habt, die Funktion ist auch mit dem break und continue doch sofort zu verstehen.
also ob ein radio 100Eu kostet oder das gleiche 200Eu ist für mich ein riesenunterschied und der laden mit 200Eu ist nicht ok. obwohl ich mir beides leisten könnte.
ob ich 45 minuten zur arbeit fahre oder 90 minuten ist für mich ein riesenunterschied, obwohl ich beides könnte.
warum sollte es für mich keinen unterschied machen, wie komplex die funktionen sind, obwohl ich beide verstehen kann? und du mußt zugeben, daß das for-if-break-continue-monster durchaus von inkompetenz zeugt. kein problem, wir machen alle fehler. aber Power Off hat die klappe zu weit aufgerissen und so getan, als sei er so perfekt wie TGGC und leifert dann solche stümperei ab. da stimmt was nicht und sage ihm so lange, daß er mist codet, bis er mal anfängt, über seinen programmierstil nachzudenken.
-
@volkrad du hast in dem fall recht deine version der schleife gefaellt mir auch besser obwohl die andere version auch witzig ist!
das zeigt wiedermal: VIELE WEGE FUEREN NACH HINTERKUMPFLING
-
volkard schrieb:
aber Power Off hat die klappe zu weit aufgerissen und so getan, als sei er so perfekt wie TGGC
Gar nicht wahr! Du bist doch hier der, der permanent die Klappe aufreisst!
Viele Wege fuehren nach Rom. Du hast echt noch nix gesehen, Junge.
Ich kann's einfach nicht glauben, dass so ein vermeintlich intelligenter Bursche wie Du sich an so einem Firlefanz aufgeilt.
-
Power Off dann verlass doch bitte das Forum! Noobs wie dich brauchen wir hier nicht.
-
Walli schrieb:
Ein while ist hier kürzer, eleganter und erzeugt semantisch identischen Code, also nenn mir einen guten Grund es nicht zu benutzen.
Mag sein, aber Quelltext wird ja ziemlich häufig umgebaut und dann kommen schon mal Konstruktionen dabei raus, die nicht optimal sind. Wenn man auf den ersten Blick ein bessere und äquivalente Zeile einfällt, dann kann man das korrigieren, aber sich nur auf solche Mikrooptimierungen zu konzentrieren, ist auch nicht zielführend. Um bei Volkards Radio-Vergleich zu bleiben: ich fahre nicht von München nach Travemünde um es für 20 Cent billiger zu bekommen.
-
Daniel E. schrieb:
Walli schrieb:
Ein while ist hier kürzer, eleganter und erzeugt semantisch identischen Code, also nenn mir einen guten Grund es nicht zu benutzen.
Mag sein, aber Quelltext wird ja ziemlich häufig umgebaut und dann kommen schon mal Konstruktionen dabei raus, die nicht optimal sind. Wenn man auf den ersten Blick ein bessere und äquivalente Zeile einfällt, dann kann man das korrigieren, aber sich nur auf solche Mikrooptimierungen zu konzentrieren, ist auch nicht zielführend.
Solche Mikrooptimierungen machen aber oftmals den Unterschied zwischen lesbar und nicht lesbar aus. Nach über einem Jahrzehnt C++ sollte man entweder soviel Erfahrung haben, dass man ein while benutzt wenn es angebracht ist oder weniger rumprollen. Ansonsten ACK: Wenn Code in Entwicklung ist wird manchmal erstmal funktionierender Müll gebaut und später evtl. mal schöner gemacht wenn man es besser weiß.
-
Walli schrieb:
Wenn Code in Entwicklung ist wird manchmal erstmal funktionierender Müll gebaut und später evtl. mal schöner gemacht wenn man es besser weiß.
Den letzten Teil nach dem "und" kannste getrost streichen. Niemand hat das Geld, um Code nochmal nachzubearbeiten.
-
Power Off schrieb:
Walli schrieb:
Wenn Code in Entwicklung ist wird manchmal erstmal funktionierender Müll gebaut und später evtl. mal schöner gemacht wenn man es besser weiß.
Den letzten Teil nach dem "und" kannste getrost streichen. Niemand hat das Geld, um Code nochmal nachzubearbeiten.
Jaja, du bist natürlich der einzige der schon professionell programmiert hat. Code wird nicht nur runtergeschrieben sondern beizeiten auch erweitert und wenn dabei etwas unschönes auffallen sollte bügelt man das bei Gelegenheit gleich aus.
-
In der Praxis gibt es fast nur schlechten Code. Aber trotzdem können wir es doch hier versuchen besser zu machen.
-
Power Off schrieb:
volkard schrieb:
aber Power Off hat die klappe zu weit aufgerissen und so getan, als sei er so perfekt wie TGGC
Gar nicht wahr! Du bist doch hier der, der permanent die Klappe aufreisst!
Viele Wege fuehren nach Rom. Du hast echt noch nix gesehen, Junge.
Ich kann's einfach nicht glauben, dass so ein vermeintlich intelligenter Bursche wie Du sich an so einem Firlefanz aufgeilt.
ich an deiner Stelle würde den Ball ein klein wenig Flacher halten...
volkard ist nicht aus gutem Grund einer der besten Programmierer dieses Boards.Wir alle wissen, dass solche Schandtaten wie du sie am laufenden band fabrizierst auch im realen Leben vorkommen, aber das rechtfertigt sie noch lange nicht. Wenn ich die Möglichkeit habe, neuen code zu schreiben, dann würd ich nicht freiwillig sone schweinerei fabrizieren, sondern erstmal versuchen, mit dem bestmöglichen sprachlichen mittel die Aufgabe zu lösen. Um deinem nun kommenden Zeitaspektargument entgegenzuwirken: das ist eine Sache der Erfahrung. Ein guter Programmierer unterscheidet sich von einem schlechten dadurch, dass er auf den ersten Blick erkennt, welches Sprachliche mittel an der Stelle am geeignetsten ist, während der schlechte, bzw unerfahrene programmierer verschiedene Szenarien erstmal durchspielen muss. Natürlich gibts noch die Sorte an programmierern, die bewusst die denkbar schlechteste Lösung benutzen, um sie dann vehement entgegen jeder Logik verteidigen...nur, zu welcher Kategorie willst du gehören?
Achja: Firlefanz ist dies garantiert nicht. Code wie du ihn schreibst will ich nicht debuggen, nein ich will ihn mir nichtmal anschauen. Es ist ein unterschied, ob ich sofort erkenne was gemeint ist und den Code nur zu überfliegen brauch um ihn zu verstehen, oder ob ich mir ein Blatt papier rauskramen muss auf dem ich erstmal versuche die code verschlüsselung zu knacken
-
aber powerOff ein trost es gibt sogar contest wo man unuebersichtlichen kacke code hacken muss da kannste ja mal mitmachen! *kich*
-
--linuxuser-- schrieb:
aber powerOff ein trost es gibt sogar contest wo man unuebersichtlichen kacke code hacken muss da kannste ja mal mitmachen! *kich*
Nee danke, den hab ich schon, wenn ich andere Leute Code warten muss.
Da rotzt man mal schnell was hin, um einem anderen Benutzer zu helfen, und zum Dank kriegt man einen dicken fetten Arschtritt. Ist wie im richtigen Leben.
Das weiss ich auch, dass while() kuerzer als meine for()-Konstruktion ist.
Und dann schreibt man ein paar Zeilen Code, um jemandem zu helfen, und schon stuerzt sich eine ganze Horde Klugscheisser auf einen und behauptet, man waere ein Newbie.
Wenn ihr den Leuten, die ein Problem haben, helfen wuerdet, anstatt nur ueber Loesungen debattieren, die gepostet wuerden, waere das Board mit Sicherheit viel nuetzlicher fuer angehende Programmierer.
Andererseits -- warum soll ich mir jeden Scheissdreck gefallen lassen? (die Endlosschleife von Flamewars. )
-
mann tek it esy