c programm bricht prötzlich ab?
Hallo, ich habe ein kleines Problem. bei einem kleinen Programm für die Schule bricht mein Programm nach dem ersten scanf einfach ab, obwohl es eigentlich weitergehen müsste. ich programmiere in c in visual studio 2017.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main() {
char name[1000];
char geschlecht[1];
float monatslohn = 0;
int alter = 0;
int groesse = 0;
printf("Eingabe Name XXXXXXXX: ");
fflush(stdin);
scanf("%c", &name);
//hier bricht das programm ab
printf("Eingabe Geschlecht (m/w): ");
fflush(stdin);
scanf("%c", &geschlecht);
printf("Eingabe Monatslohn XXX.XX: ");
fflush(stdin);
scanf("%d", &monatslohn);
printf("Eingabe Alter XX: ");
fflush(stdin);
scanf("%d", &alter);
printf("Eingabe Groesse in cm XXX: ");
fflush(stdin);
scanf("%d", &groesse);
printf("%c; %c; %d; %d; %d", &name, &geschlecht, &monatslohn, &alter, &groesse);
fflush(stdin);
getchar();
return 0;
}
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 ;-)
LOL - mir auch ;-)
aber da gibt's ja auch eine HIlfe...
und wenn alle Stricke reissen: google "scanf"
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.
Na ja, kein Windowsprogrammierer muss "man" kennen. Und deswegen extra Bücher wälzen? "man man" funktioniert ja auch nicht!
Printf erwartet mindestens zwei Argumente, einen Formatstring und das, was ausgegeben werden soll.
https://www.tutorialspoint.com/c_standard_library/c_function_printf.htm
Keine Ahnung, ob das ursächlich für Dein Problem ist, und warum das beim Compilieren keine Warnung ergibt.
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.
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.
Also dass man im "visual studio 2017" (also Windows IDE) "man scanf" (ein Unix OS-Kommando) aufrufen kann, ist mir neu.