c programm bricht prötzlich ab?

4 Antworten

Unabhängig davon, daß scanf gefährlich ist (bufferüberläufe),
hast Du %c (=Character) als scan-format für name angegeben.
Denke es sollte wohl %s sein (siehe scanf-dokumentation; "man scanf")
Dieses %c wird wohl einen Buchstaben (anstatt einen string) einlesen.
Aufpassen: man liest damit auch das Zeilenende als <nl> unter Unix und (soweit ich erinnere) <cr><nl> unter Windows *).
Das gilt dann auch für das nächste %c - eventuelle solltest Du mal ausgeben, was da an Eingabe überhaupt ankommt...

Auch fflush(stdin) würde ich mal auskommentieren. Bin mir gar nicht sicher (ohne nachzulesen), was das bei einem input-stream macht (normalerweise wird fflush für ausgabe-streams verwendet).

Wenn das dann funktioniert, wirst Du beim Lohn (float vs. %d = integer) probleme kriegen. Aufpassen: das format-Argument von scanf muss immer zum Datentyp der Zielvariable passen!
Das gilt auch für das folgende printf. C ist eine dumme Sprache - Du must selbst aufpassen.

Übrigens: wenn ein C-Programm nicht richtig funktioniert, sollte man es mit "-g"
übersetzen, und dann mit dem debugger "gdb" laufen lassen.
(oder alternativ in einer IDE wie Visualstudio oder eclipse).
Ansonsten ist es oft schwer, den Fehler zu finden.

*) programmiere zwar auch in C, aber scanf habe ich vermutlich schon seit >30 Jahren nicht mehr im Programm ;-)


tom1stein  29.01.2019, 07:20

Also dass man im "visual studio 2017" (also Windows IDE) "man scanf" (ein Unix OS-Kommando) aufrufen kann, ist mir neu.

sarahj  29.01.2019, 10:17
@tom1stein

LOL - mir auch ;-)
aber da gibt's ja auch eine HIlfe...
und wenn alle Stricke reissen: google "scanf"

TomRichter  29.01.2019, 21:14
@tom1stein

Direkt aufrufen nicht - aber wer nicht versteht, was mit "man scanf" gemeint ist, sollte lieber erst etwas Literaturstudium betreiben, bevor er sich ans Programmieren macht.

tom1stein  30.01.2019, 06:20
@TomRichter

Na ja, kein Windowsprogrammierer muss "man" kennen. Und deswegen extra Bücher wälzen? "man man" funktioniert ja auch nicht!

Die Funktion scanf() sollte nicht genutzt werden. Genauso führt die Verwendung von fflush() zu plattformabhängigem Code. Unter Linux wird das nicht funktionieren.

Bitte lies diesen Artikel durch. Dort werden u. a. bessere Alternativen zu scanf() erläutert.

Woher ich das weiß:Studium / Ausbildung

nochwas:
Du siehst vermutlich nichts, weil Du nach den printfs "fflush(stdout)" machen solltest, da Deine printf-Strings nicht mit Newline enden.
Dann puffert printf und gibt erst mal nichts aus.