PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C Problem mit Ausgabe


der King lebt
2007-07-23, 22:07:08
hi,
weil ich mich fürs Studium mit C beschäftigen muss komm ich nicht um die Ein und Ausgabe mit scanf und printf herrum (ich muss sagen das ich das in c++ mit cin und cout einfacher fand). Ich hab schon ein bisschen mit printf und scanf herumgespielt aber irgendwie funktioniert das nicht. Den ersten Buchstaben soll Buchstaben eingeben werden und den zweiten als Zahl aber bei der Ausgabe wird nur der als Zahl eingegebene Buchstabe ausgegeben.
Ich hoffe mal das mein problem nicht allzu niveaulos ist und sich einer erbarmt mir zu helfen.

#include <stdio.h>

int main(void)
{
char a,b;
printf("1. char eingeben: ");
scanf("%c",&a);
fflush(stdin);
printf("2. char als Zahl eingeben: ");
scanf("%d",&b);
fflush(stdin);
printf("1. char: %c (%d)\n2. char: %c (%d)",a,a,b,b);

getchar();
return 0;
}

instinct
2007-07-23, 22:25:10
schonmal mit:
scanf("%s",&a);
...
versucht ? funktioniert in java, in c hab ich keine ahnung, reine vermutung, schlagt mich wenns falsch ist :O

rotalever
2007-07-23, 23:06:45
schonmal mit:
scanf("%s",&a);
...
versucht ? funktioniert in java, in c hab ich keine ahnung, reine vermutung, schlagt mich wenns falsch ist :O
*schlag*

Each pointer argument must be of a type that is appropriate for the value returned by the corresponding conversion specification.
einfach aus char ein String machen geht wohl nicht. Wenn dann ein char-array und dann auch nicht als "&a" sonder nur als "a" schreiben, aber das wird hier ja nicht benötigt.

Gibt der denn für "a" gar nichts aus?

der King lebt
2007-07-23, 23:14:18
Doch ein Leerzeichen gibt er aus und in der Klammer eine null. Wenn man aber bei der 2. Eingabe einen Buchstaben drückt dann gibt der computer den inhalt der ersten variablen aus aber nicht mehr den der zweiten.

rotalever
2007-07-23, 23:16:19
Ok habs mal kompiliert und gecheckt. Funktioniert tatsächlich nicht nur sondern ist auch falsch und produziert böse Fehler. Wenn Du bei scanf den Type "%d" hast, dann musst du "b" als int deklarieren. Also "int b" statt "char b". Dann geht alles. Das liegt daran, dass char ein byte sind und er bei "%d" i.d.r. vier bytes annimmt. Da schreibt der natürlich dann in Speicherbereiche, wo er nicht soll, was dann erstens anscheinend das "a" überschreibt und noch einen Memory Fehler mit sich bringt.

rotalever
2007-07-23, 23:17:44
Wieso funktioniert das auch mit ist "%s" ist das noch ANSI Standart?
%s gibt laut Kernighan/Ritchie an, dass ein char array gefragt ist wo zusätzliche eine abschließende \0 gefragt ist.

der King lebt
2007-07-23, 23:28:38
danke ohne deine Hilfe würde ich sicher noch viele stunden sitzt und grübeln warum das nicht funktioniert.

rotalever
2007-07-24, 11:02:05
Wobei es ja in diesem Fall sogar so war, dass ein guter Debugger schon auf die entsprechende Zeile hingewiesen hat, sonst wäre es mit vermutlich auch nicht aufgefallen ;)