Zeichen umwandeln
-
Ich will jede Ziffer einzeln umwandeln.
Ich habe gesehen dass es so funktioniert.
zahl[i]="1\0" umgewandelt[i]= atoi(zahl[i]);
Da aber die Zahlen zb. so sind
char zahl[6]="12345";
habe ich gedacht das es auch so funktioniert
i=0; umgewandelt[i]= atoi("zahl[i]\0")
Hier ist ja zahl[0]=1 und hinten hängt noch \0. Somit wäre es ja auch ein string der so aussieht
umgewandelt[0]=atoi("1\0");
Andere Frage:
Wenn ich habe:
scanf("%d",&a); printf("Hallo");
steht danach immer
1 Hallo
Wäre es auch irgendwie möglich dass es so steht
1 Hallo
Bräuchte das scanf und printf in der selben Zeile.
-
hatschii schrieb:
Ich will jede Ziffer einzeln umwandeln.
Ich habe gesehen dass es so funktioniert.
zahl[i]="1\0" umgewandelt[i]= atoi(zahl[i]);
Kauf dir ein C Buch und lies es dir durch. Du hast offensichtlich große Wissenslücken, was den basis Datentypen angeht.
1. Eine Zeichenkette "blablabla" hat automatisch ein \0 Terminierungszeichen. Damit brauchst du bei "1" nicht "1\0" zu schreiben. Im Speicher zieht es so aus: ("1") {'1', 0}, ("1\0") {'1', 0, 0} aber für C endet die Zeichenkette beim ersten '\0', unahängig davon, wieviel Speicher reserviert wurde. Wenn man das Terminierungszeichen vergisst, dann hat man 100% einen Buffer overflow, denn man würde über die Speichergrenzen hinaus lesen bzw. schreiben.
-
zahl[i]
ist einchar
, KEINE Zeichenkette. Dein Compiler müsste dir halslaut warnen, dass du unkompatible Typen zuweist, wenn duzahl[i]="1\0";
schreibst. Also ignoriere die Warnungen des Compilers nicht. -
atoi(zahl[i]);
ist falsch. Zum dritten Mal: atoi erwartet eine Zeichenkette (Zeiger auf eine Zeichenkette/Array von chars) und kein Zeichen.zahl[i]
ist einchar
. Der Compiler müsste da wieder halslaut warnen.atoi
interpretiertzahl[i]
als die Anfangsadresse der Zeichenkette und liest solange durch, bis \0 gefunden wird, was in Segfault enden kann.
hatschii schrieb:
Ich will jede Ziffer einzeln umwandeln.
dann lies meinen letzten Beitrag nochmal neu, da hab ich eine Lösung gepostet.
hatschii schrieb:
Ich habe gesehen dass es so funktioniert.
zahl[i]="1\0" umgewandelt[i]= atoi(zahl[i]);
das geht so nicht, du hast nur Glück, dass das Programm nicht gleich abschmiert.
hatschii schrieb:
umgewandelt[i]= atoi("zahl[i]\0")
liest du überhaupt deinen eigenen Code durch. Wenn du
atoi
wärst, was für einen Wert würdest du bei dieser Zeichenkette zurückgeben?hatschii schrieb:
Wäre es auch irgendwie möglich dass es so steht
1 Hallo
Bräuchte das scanf und printf in der selben Zeile.
leider mit ANSI C nicht machbar. Wenn du OS-Spezifische Bibliotheken zur Steuerung des Terminals nimmst, dann geht das schon. Welches OS?
-
-
Ich habe gesehen dass du eine Lösung gepostet hast, mir ging es nur darum wieso es nicht auf die eine Art funktioniert.
atoi braucht eine Zeichenkette.
Meine Überlegung war jetzt, wenn ich aus
zahl[5]="1234"
nur die 2 haben will, könnte ich an die 2 noch '\0' dranhängen und dann wäre es nicht mehr nur ein Zeichen sondern eine Zeichenkette.
Aber ist egal, eine Lösung ist vorhanden.
Ich benütze Linux.
- Ich habe eine do-while Schleife. Die while-Bedingung ist bischen lang.
Erst ab dem zweiten mal wenn die do-Schleife ausgeführt wird will ich etwas ausgeben.
Muss ich da eine if-Schleife in die do-Schleife machen oder kann ich das auch irgendwie an das while anhängen.
zb. so
do { }while( ){ }
2)Ich habe
scanf("%d %d %d %d", a,b,c,d)
. Kann ich irgendwie sagen dass ab der 5 Zahl (wenn ich mehrere eingebe), die Zahl nicht mehr am Bildschirm erscheinen soll.
3)Ich würde gerne Farbpunkte verwenden zb. 1=rot, 2=blau usw.
Ist das irgendwie machbar.
- Ich habe eine do-while Schleife. Die while-Bedingung ist bischen lang.
-
hatschii schrieb:
Meine Überlegung war jetzt, wenn ich aus
zahl[5]="1234"
nur die 2 haben will, könnte ich an die 2 noch '\0' dranhängen und dann wäre es nicht mehr nur ein Zeichen sondern eine Zeichenkette.damit würdeste aber die '3' vernichten. mach lieber zahl[1]-'0' (hat ja supertux schon vorgeschlagen).
-
hatschii schrieb:
- Ich habe eine do-while Schleife. Die while-Bedingung ist bischen lang.
Erst ab dem zweiten mal wenn die do-Schleife ausgeführt wird will ich etwas ausgeben.
Muss ich da eine if-Schleife in die do-Schleife machen oder kann ich das auch irgendwie an das while anhängen.
entweder mit ner if-anweisung (keine if-schleife), oder du macht das, was die schleife beim ersten durchlauf machen soll, vor der eigentlichen schleife.
- Ich habe eine do-while Schleife. Die while-Bedingung ist bischen lang.
-
hatschii schrieb:
Meine Überlegung war jetzt, wenn ich aus
zahl[5]="1234"
nur die 2 haben will, könnte ich an die 2 noch '\0' dranhängen und dann wäre es nicht mehr nur ein Zeichen sondern eine Zeichenkette.
du kannst in einem Zeichen kein weiteres "reinquetschen" oder so. Weißt nicht, was du dir da vorstellst. C ist ganz einfach, man hält sich strikt an die Datentypen, ein zahl[2] ist ein char und du kannst es nicht einfach so daraus etwas anders machen.
-
hatschii schrieb:
Hallo ich würde gerne 5 char Zeichen in int umwandeln.
Poste doch mal ganz genau deine Anfangssituation, und welches Ergebniss du am Ende erhalten möchtest. So etwas wie:
Ausgangspunkt:
char zahl[5] = {'1', '2', '3', '4', '5'};
erwartete Ausgabe:
Zahl 1 = 1
Zahl 2 = 2
Zahl 3 = 3
Zahl 4 = 4
Zahl 5 = 5Lösung wäre dann:
char zahl[5] = {'1', '2', '3', '4', '5'}; int i; for(i = 0; i < 5; i++){ printf("Zahl %i = %i\n", (i+1), (int)(zahl[i] - '0')); }
-
@guggstdu
zahl[i] - '0'
das passt eigentlich ich will aus einer eingegebenen char-Zahl eine int Zahl.
Danke.Ich habe in einer do-while-Schleife eine doppelte for Schleife die auf Zahlen geprüft wird. Wenn eine Zahl doppelt vorkommt soll die do-Schleife noch mal durchlaufen werden.
Die doppelte for Schleife kann ich ja nicht in die while()-Bedingung schreiben.
Damit ich nicht jeden Wert einzeln in der while-Bedingung überprüfe bräuchte ich eine Hilfsvariable oder gäbe es noch eine andere Möglichkeit.Man kann ja am Anfang schreiben
char zahlen[10]={0};
Wie ist es aber wenn ich mitten im Programm das zahlen-Array auf 0 setzen will
Wie kann ich in einem C-Programm rote Punkte auf der Konsole ausgeben.
Ich bin mir nicht sicher ob Ansi-C das richtige Forum ist, wenn nicht wo kann ich diese Frage stellen.MfG
-
hatschii schrieb:
Wie ist es aber wenn ich mitten im Programm das zahlen-Array auf 0 setzen will
for(i = 0; i < 5; i++){ zahl[i]=0; }
-
Meinte
int zahlen[5]={0};
Gibt es keine einfachere Möglichkeit als die for-Schleife.
-
hatschii schrieb:
Meinte
int zahlen[5]={0};
Gibt es keine einfachere Möglichkeit als die for-Schleife.
für nullsetzen kannste auch
memset(zahlen,0,sizeof(zahlen));
schreiben. aber einfacher finde ich das nicht.
-
hatschii schrieb:
Wie kann ich in einem C-Programm rote Punkte auf der Konsole ausgeben.
Ich bin mir nicht sicher ob Ansi-C das richtige Forum ist, wenn nicht wo kann ich diese Frage stellen.
MfGDOS und Win32-Konsole oder bei den Linuxern.
-
Wichtiger ist mir momentan Linux
-
hatschii schrieb:
@guggstdu
zahl[i] - '0'
das passt eigentlich ich will aus einer eingegebenen char-Zahl eine int Zahl.
Danke.Na toll, siehe Seite 1, mein erster Beitrag
wozu geb ich mir hier die Mühe, wenn Leute nicht mal die Beiträge zu lesen scheinen?
-
Ich hatte deinen Beitrag gelesen. Ich hatte jedoch das atoi für die Umwandlung im Kopf und somit wollte ich versuchen das auf diese Art zu lösen. Ich wußte nicht dass das nur für Zeichenketten gilt und wollte es auf diese Art probieren.
Letztendlich mußte ich diese Variante mit der Ascii-Subtrahierung hinnehmen.