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
int
ein, wo nur Platz für einenchar
ist.
D.h., wenn einint
z.B. vier Bytes hat, schreibtscanf("%d", &Zahl);
das erste Byte inZahl
und 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 einfacherchar
könnte ja auchunsigned
sein.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
int
zu 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 einenchar
benutzt. 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 einenint
um und schreibt die an die Stelle auf die der übergebene Zeiger zeigt.
In meinem (und wahrscheinlich auch bei Deinem) System benötigt einint
4 Byte. Wenn ich jetzt einen Zeiger auf einen einzigenchar
übergebe passt derint
nicht und es passiert ein Fehler.MUGUMAN schrieb:
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?Ja.
Muss weg... Viel Erfolg!
-
Danke für die schnelle Hilfe