Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

21

13.11.2011, 21:50

Was nicht sein kann. Ansonsten benutz den debugger und geh es Schritt für Schritt durch. Dein Code kann eigentlich auch nicht funktionieren, da er nicht weiß was er bei "bla" nun als eingabe erwartet. Von daher würde er die Variable bla uninitialisiert haben. Darauf wollte ich eigentlich hinaus. Folgender Code funktioniert bei mir ohne Probleme:

C-/C++-Quelltext

1
2
int init;
    do  {       scanf("%u", &init);     if(init < 0)        {           printf("Falsch\n");     }   }while(init < 0);



Mach mal ein Projekt und pack erst mal nur den Code rein und teste mal. Arbeite dich schön Schritt für Schritt weiter.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

22

13.11.2011, 22:27

Warum macht Ihr Euch eigentlich die Mühe? Bei so viel patzigen Antworten würde ich schon lange nicht mehr helfen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

23

13.11.2011, 22:31

Weil man trotz dessen der patzigen Antworten auch Hilfe verdient hat. Manche sehen das zu selbstverständlich an, trotzdem haben diese doch Hilfe verdient, oder warum heißt es dann, dass man hier nachfragen könne?

MfG
Check

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

24

13.11.2011, 22:43

Hilfe erbeten und Lösungen vorkauen sind zwei verschiedene Dinge, aber manche Mitglieder denken scheinbar, dass sie auf letzteres eine Art Anrecht hätten statt nur auf ersteres. Und sowas kann keiner leiden, zu Recht.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

25

13.11.2011, 22:54

Nein, leiden kann das keiner.
Aber warum ist man hier? Um Hilfe zu erhalten die man nicht von einem Buch bekommt. Sicher ist es asozial sich so zu verhalten, wahrscheinlich auch wie ich mich momentan zu verhalten scheine, aber man selbst wäre genauso asozial, wenn man denn nicht helfen würde. Wenn die Lösung wirklich 1A beschrieben wurde, dann ist das verständlich. Wir beziehen das jetzt mal nicht auf das Thema hier.
Aber wenn die Lösung noch nicht komplett eindeutig ist bzw. einem alle Fragen erklärt, dann beginnt mein zweiter Satz zu wirken, denke ich.
Wahrscheinlich wird das jetzt wieder falsch verstanden. :/

MfG
Check

Lyb

Frischling

  • »Lyb« ist der Autor dieses Themas
  • Private Nachricht senden

26

14.11.2011, 10:00

Hilfe erbeten und Lösungen vorkauen sind zwei verschiedene Dinge, aber manche Mitglieder denken scheinbar, dass sie auf letzteres eine Art Anrecht hätten statt nur auf ersteres. Und sowas kann keiner leiden, zu Recht.

"Patzige" Antworten waren nicht meine Absicht und wenn ich meine Posts durchlese kann ich auch nichts "patziges" daran erkennen.
Ich bin nicht verantwortlich dafür, wie du gewisse Sätze verstehst, dafür bist du allein verantwortlich.
Aber dennoch, entschuldige bitte wenn meine Aussagen dir nicht gepasst haben, werde in Zukunft noch mehr darauf achten.

Und des weiteren ist es manchmal schwierig zu 100% freundlich zu bleiben, wenn man eine ganz simple Frage stellt und von
Leuten, die sagen, dass sie angeblich wissen wo von sie sprechen, nicht verstehen worum es geht bzw. die Posts
erst garnicht richtig lesen.

DerMark

Treue Seele

Beiträge: 324

Wohnort: Emsdetten

Beruf: Softwareentwickler

  • Private Nachricht senden

27

14.11.2011, 10:07

Die Lösung wurde dir schon verraten.

Verwende kein unsigned für deine Zahlenvariable, unsigned sorgt dafür das dein Integer niemals negativ ist und sein kann, ergo wenn du eine negative Zahl eingibst kommt immer eine positive dabei heraus. Und sowas auf negativ zu prüfen ist etwas unmöglich, ergo a < 0 wird dir nie true liefern.

%u als Formatsybol bei scanf nimmt auch nur unsigned Werte an, wodurch du auch keine negative Zahl wirklich eingeben kannst. Ich weiß grade nicht wie sich scanf bei falschen Eingaben verhält (negative Zahlen bzw keine Zahl) vermute aber mal das es 0 zurückliefert für 0 erkannte Eingaben, diesen Wert müsstest du benutzen um auf Fehler zu checken (den Rückgabewert vom scanf). Dies wurde aber bereits mehrfach im Thread geantwortet ;)

Wenn scanf die Eingabe nicht annimmt wird vermutlich der vorherige Wert deiner Variable nicht angefasst, da du diese Zahl nie initialisiert hast wird im besten fall 0 (Debug Builds) und in allen anderen Fällen irgendein Müll in der Variable stehen (also irgendeine Zahl).

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

28

14.11.2011, 11:00

"Patzige" Antworten waren nicht meine Absicht und wenn ich meine Posts durchlese kann ich auch nichts "patziges" daran erkennen.
Ich bin nicht verantwortlich dafür, wie du gewisse Sätze verstehst, dafür bist du allein verantwortlich.

So eine Aussage halte ich z.B. schon für ziemlich patzig.

Und des weiteren ist es manchmal schwierig zu 100% freundlich zu bleiben, wenn man eine ganz simple Frage stellt und von
Leuten, die sagen, dass sie angeblich wissen wo von sie sprechen, nicht verstehen worum es geht bzw. die Posts
erst garnicht richtig lesen.

Es ist auch nicht einfach freundlich zu bleiben, wenn jemand eine Frage stellt, dazu mindestens drei Fehlerquellen genannt bekommt und danach nochmal nachfragt nach dem Motto: "Kann mir denn jetzt endlich mal einer den korrekten Code schreiben, ich sehe keine Antwort!?!". Code vorkauen ist etwas, was wir hier sehr ungern machen. Erstens sind wir keine Code-Monkeys und zweitens hilft es DIR überhaupt nicht, weil Du nicht lernst die Aussagen anderer passend auszuwerten, für Dich zu reflektieren und am Ende daraus eine Lehre zu ziehen und neues Wissen zu schöpfen. Wir fördern eigenständiges Denken. Wir weisen auch gern auf Fehlerquellen hin. Aber statt vorgekauten Code wirst Du hier im Normalfall nur eine Beschreibung des von Dir begangenen Fehlers und der Dir offen stehenden Möglichkeiten als Antwort bekommen.
Ein gewisse Eigenleistung wird schon noch von Dir verlangt. Vor allem auch eine geistige. Denn wenn jemand die Hilfestellungen nicht begreift, dann ist das entweder ein Zeichen von fehlendem Grundwissen oder schlicht von Überforderung mit dem, was er vor hat. In beiden Fällen gibt es nur eine Lösung: Üben und lernen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Lyb

Frischling

  • »Lyb« ist der Autor dieses Themas
  • Private Nachricht senden

29

14.11.2011, 11:01

Die Lösung wurde dir schon verraten.

Verwende kein unsigned für deine Zahlenvariable, unsigned sorgt dafür das dein Integer niemals negativ ist und sein kann, ergo wenn du eine negative Zahl eingibst kommt immer eine positive dabei heraus. Und sowas auf negativ zu prüfen ist etwas unmöglich, ergo a < 0 wird dir nie true liefern.

%u als Formatsybol bei scanf nimmt auch nur unsigned Werte an, wodurch du auch keine negative Zahl wirklich eingeben kannst. Ich weiß grade nicht wie sich scanf bei falschen Eingaben verhält (negative Zahlen bzw keine Zahl) vermute aber mal das es 0 zurückliefert für 0 erkannte Eingaben, diesen Wert müsstest du benutzen um auf Fehler zu checken (den Rückgabewert vom scanf). Dies wurde aber bereits mehrfach im Thread geantwortet ;)

Wenn scanf die Eingabe nicht annimmt wird vermutlich der vorherige Wert deiner Variable nicht angefasst, da du diese Zahl nie initialisiert hast wird im besten fall 0 (Debug Builds) und in allen anderen Fällen irgendein Müll in der Variable stehen (also irgendeine Zahl).

Ich danke dir für deine Mühe Mark, aber das das mit unsigned nicht funktioniert hatte ich schon lange verstanden.
Deshalb hatte ich das auch aus dem Code entfernt und es angepasst. Mein letztes Code-Beispiel von gestern war ja:

int bla;

scanf("%d", &bla);

if (bla < 0)
{
printf("Falsche Eingabe");
}

Und da hatte es nicht funktioniert, obwohl das garnicht sein kann.
Jedenfalls ist heute ein neuer Tag also auch neues Glück und der Code hat unverändert funktioniert.
Wer weiß wo da der Fehler war, ich jedenfalls nicht ;)

DerMark

Treue Seele

Beiträge: 324

Wohnort: Emsdetten

Beruf: Softwareentwickler

  • Private Nachricht senden

30

14.11.2011, 11:06

Das funktioniert einwandfrei bei mir, gebe ich -5 an erscheint bei mir "Falsche Eingabe". Was genau passiert bei dir denn, evtl verstehe ich da was falsch, er zeigt nichts an oder beendet sich dein Programm ohne was anzuzeigen?

Werbeanzeige