struct teile einlesen
-
Also ich hab nen Problem, ich will bei nem Programm 3 Datensätze einlesen, die
chars und ints enthalten.Beim einlesen des Integers hängt sich das Prog auf, und ich finde den Fehler einfach nicht.
#include <stdio.h> #include <stdlib.h> #include <conio.h> struct Buchbestand { char Autor[20]; char Buchtitel[20]; int Erscheinungsjahr; int Isbn; }titel1,titel2,titel3; void main() { printf("Bitte ersten Datensatz eingeben:\n"); printf("Autor:"); scanf("%s\n",titel1.Autor); printf("Buchtitel:"); scanf("%s\n",titel1.Buchtitel); printf("Erscheinungsjahr:"); scanf("%S\n",titel1.Erscheinungsjahr); // hier hängt sich das Prog auf? printf("ISBN (ohne Bindestrich):"); scanf("%S\n",titel1.Isbn); printf("Bitte zweiten Datensatz eingeben:\n"); printf("Autor:\n"); scanf("%s",titel2.Autor); printf("Buchtitel:\n"); scanf("%s",titel2.Buchtitel); printf("Erscheinungsjahr:\n"); scanf("%s",titel2.Erscheinungsjahr); printf("ISBN (ohne Bindestrich):\n"); scanf("%s",titel2.Isbn); printf("Bitte dritten Datensatz eingeben:\n"); printf("Autor:\n"); scanf("%s",titel3.Autor); printf("Buchtitel:\n"); scanf("%s",titel3.Buchtitel); printf("Erscheinungsjahr:\n"); scanf("%s",titel3.Erscheinungsjahr); printf("ISBN (ohne Bindestrich):\n"); scanf("%s",titel3.Isbn); }
-
Du willst einen String einlesen, aber Erscheinungsjahr ist vom Typ int, als lies mit %i oder %d anstatt %s bei scanf ein.
-
Erstens: Es heißt "int main()"
Zweitens: Schau dir mal die Bedeutung der man: scanf(3) Formatstrings an - int Werte liest du mit %i ein
Drittens: ob eine ISBN sinnvoll in eine int-Variable verstaut werden kann, wage ich zu bezweifeln (vor allem: Wie willst du die Prüfziffer 'X' unterbringen?).
-
die ISBN soll ohne Bindestrich untergebracht werden, als zahlenwert im prinzip.
ja ich weis int main um den speicher nicht voll zu müllen...
-
Dragonslayer schrieb:
ja ich weis int main um den speicher nicht voll zu müllen...
heh?
-
naja bei void main müllt mman ja den RAM voll weil man kein return 0; nutzen kann
hm irgendwie hat %i jetzt auch nicht wirklich geholfen, das Prog hebt sich wieder auf..
#include <stdio.h> #include <stdlib.h> #include <conio.h> struct Buchbestand { char Autor[20]; char Buchtitel[20]; int Erscheinungsjahr; int Isbn; }titel1,titel2,titel3; int main() { printf("Bitte ersten Datensatz eingeben:\n"); printf("Autor:"); scanf("%s",titel1.Autor); printf("\nBuchtitel:"); scanf("%s",titel1.Buchtitel); printf("\nErscheinungsjahr:"); scanf("%i",titel1.Erscheinungsjahr); printf("\nISBN (ohne Bindestrich):"); scanf("%i",titel1.Isbn); printf("\n\nBitte zweiten Datensatz eingeben:"); printf("\nAutor:\n"); scanf("%s",titel2.Autor); printf("Buchtitel:\n"); scanf("%s",titel2.Buchtitel); printf("Erscheinungsjahr:\n"); scanf("%i",titel2.Erscheinungsjahr); printf("ISBN (ohne Bindestrich):\n"); scanf("%i",titel2.Isbn); printf("Bitte dritten Datensatz eingeben:\n"); printf("Autor:\n"); scanf("%s",titel3.Autor); printf("Buchtitel:\n"); scanf("%s",titel3.Buchtitel); printf("Erscheinungsjahr:\n"); scanf("%i",titel3.Erscheinungsjahr); printf("ISBN (ohne Bindestrich):\n"); scanf("%i",titel3.Isbn); return 0; }
-
Dragonslayer schrieb:
naja bei void main müllt mman ja den RAM voll weil man kein return 0; nutzen kann
wie kommst'n auf sowas
-
Dragonslayer schrieb:
naja bei void main müllt mman ja den RAM voll weil man kein return 0; nutzen kann
nö. Programm wird trotzdem ordnungsgemäß beendet und aus'm Speicher entfernt. Nur ist void main halt nicht standardkonform.
hm irgendwie hat %i jetzt auch nicht wirklich geholfen, das Prog hebt sich wieder auf..
Mit scanf kennst du dich nicht so aus, hm?
Sonst wüsstest du, dass scanf einen Zeiger als Parameter erwartet:
scanf("%i",&titel1.Erscheinungsjahr); scanf("%i",&titel1.Isbn);
-
Dragonslayer schrieb:
die ISBN soll ohne Bindestrich untergebracht werden, als zahlenwert im prinzip.
Erstens ist der Datenbereich von int etwas begrenzt (bei 4 Byte kommst du bis ca. 2 Millionen, das heißt, du kannst nur englische und französische Bücher (siehe ISBN) speichern.
Zweitens kann als letzte Ziffer der ISBN auch ein 'X' auftauchen - und das kannst du nicht in einer int-Variable unterbringen.
Und drittens "rechnet" man gewöhnlich nicht mit ISBN-Nummern.
-> insgesamt wäre es wohl besser, stattdessen ein char-Array zu verwenden.ja ich weis int main um den speicher nicht voll zu müllen...
Das hat nichts mit "Speicher vollmüllen" zu tun - 'int main()' und 'int main(int,char**)' sind schlichtweg die einzigen im Standard vorgesehenen Varianten der main-Funktion.
Zu deiner Korrektur: scanf() muß die Adresse der Variablen kennen, in die es einlesen soll - char-Arrays kannst du normal übergeben (werden automatisch in einen Zeiger auf den Anfang umgewandelt), aber bei normalen Variablen benötigst du den Adress-Operator:
scanf("%i",/*->*/&titel1.Erscheinungsjahr);