String wird nicht ausgegeben
-
Guten Tag miteinander,
Ich bin ein Anfänger im C-Programmieren und habe folgendes Problem:
Beim folgenden Code wird der String nicht ausgegeben. Wenn ich den Datentyp der Variable "Zahl" jedoch in int ändere, so funktioniert das Programm.
Woran liegt das?int main() { /* lokale Variablen */ char Array[50]; char Zahl; // Wenn dieser Datentyp int, dann funktioniert es int Index; scanf("%s",Array); scanf("%d",&Zahl); scanf("%d",&Index); printf("%s\n", Array); printf("%d\n",Zahl); printf("%d\n", Index); system ("PAUSE"); return (0);
-
schalte die Warnungen von deinem compiler ein
%d ist für int gedacht
was verstehst du unter funktionieren
welcher string
-
Du liest einen
intein, wo nur Platz für einencharist.
D.h., wenn einintz.B. vier Bytes hat, schreibtscanf("%d", &Zahl);das erste Byte inZahlund dann noch drei weitere Bytes.
In Deinem Fall landet mindestens eins davon als Nullterminierung in Deinemchar[].Gib mal eine extreme Zahl an: z.B. -1, mit hoher Wahrscheinlichkeit siehtst Du Speichermüll und dann einen Teil Deines Arrays.
Warnungen im Compiler einschalten und beachten!
-
Aber ist es nicht möglich Ganzzahlige werte, die nicht grösser oder kleiner 127 sind in ein char einzulesen?
-
gary1195 schrieb:
schalte die Warnungen von deinem compiler ein
%d ist für int gedacht
was verstehst du unter funktionieren
welcher stringUnter funktionieren verstehe ich, dass alles so ausgegeben wird, wie es vorher eingelesen wurde.
Mit String ist Array gemeint.
-
MUGUMAN schrieb:
Aber ist es nicht möglich Ganzzahlige werte, die nicht grösser oder kleiner 127 sind in ein char einzulesen?
Also ein
signed char. Dann%hhi, oder%hhd.
Ein einfachercharkönnte ja auchunsignedsein.Hast Du selbst keine Dokumentation zu
scanf()?
-
Nein leider nicht.
Aber wenn ich nur die beiden Variablen Zahl und Index mit dem Datentyp char definieren würde und mit scanf("%d") z.B. 10 einlesen würde, so würde doch auch der Zahlenwert 10 in der Variable stehen.
-
Ich glaube ich habe die Problematik nun verstanden:
Ich kann mit %d keinen Wert in eine char Varible einlesen. Aber ein char Datentyp kann verwendet werden, um mit kleinen Ganzzahlen zu rechnen.
Stimmt diese Aussage?
-
MUGUMAN schrieb:
Nein leider nicht.
Gibt's im Internet.
MUGUMAN schrieb:
Aber wenn ich nur die beiden Variablen Zahl und Index mit dem Datentyp char definieren würde und mit scanf("%d") z.B. 10 einlesen würde, so würde doch auch der Zahlenwert 10 in der Variable stehen.
Erstmal gibt es gar keinen Grund, keinen
intzu nehmen - ganz im Gegenteil könnte man argumentieren in einen größeren Datentyp einzulesen, um danach bequem auf zu große, bzw. zu kleine Eingabewerte zu überprüfen. Du gewinnst jedenfalls nicht wirklich etwas, wenn Du einencharbenutzt. Es sei denn, Du hast Millionen und Abermillionen von solchen Zahlen.Und weiterhin: Die Größe eines Datentyps ist unabhängig von seinem Inhalt:
Bei mir z.B. gilt
sizeof(int)==4.
Gegebenint a=10, b=4294967295;gilt
sizeof(a)==sizeof(b);Was macht
scanf()?
scanf()liest Zeichen ein, wandelt die - bei %d - in einenintum und schreibt die an die Stelle auf die der übergebene Zeiger zeigt.
In meinem (und wahrscheinlich auch bei Deinem) System benötigt einint4 Byte. Wenn ich jetzt einen Zeiger auf einen einzigencharübergebe passt derintnicht und es passiert ein Fehler.MUGUMAN schrieb:
Ich kann mit
%dkeinen Wert in eine char Varible einlesen. Aber ein char Datentyp kann verwendet werden, um mit kleinen Ganzzahlen zu rechnen.
Stimmt diese Aussage?Ja.
Muss weg... Viel Erfolg!

-
Danke für die schnelle Hilfe
