Stefan schrieb:
> //Nur wie soll das gehen die Funktion liefert doch einen int Wert zurück
> kein Zeichen?
Psst.
Zeichen in dem Sinne gibt es in einem Computer gar nicht.
Ein char ist auch nichts anderes als eine Variable in der eine Zahl
gespeichert wird.
Lediglich bei der Ausgabe werden char anders behandelt, in dem die Zahl
als ASCII Code eines Zeichens aufgefasst wird. Dies sorgat dann dafür,
dass auf der Anzeige nicht 65 auftaucht, sondern die Pixel gesetzt
werden, so dass du 'A' liest. Aber in der char Variablen selber steht 65
drinnen.
Es spricht nichts dagegen mit char Variablen zu rechnen. So gesehen sind
das einfach nur Integer Variablen für kleine Zahlen. Behandelt man sie
bei der Ausgabe/Eingabe mit einer Character Sonderbhandlung, dann wird
diese Zahl als ASCII Code aufgefasst. Aber mehr steckt da nicht
dahinter.
In C hat ein char keine großartige Sonderrolle, wie in anderen
Programmiersprachen. Es ist einfach nur eine Variable für kleine Zahlen,
die bei I/O anders behandelt wird als beispielsweise ein int. Aber man
kann und darf mit denen genauso rechnen, wie auch mit anderen
Datentypen. Man muss lediglich aufpassen, weil nicht klar festgelegt
ist, ob die Dinger jetzt ein Vorzeichen haben oder nicht. Aber bei dir
spielt das keine Rolle.
int j = 5;
char c = '0' + j;
ist in C absolut fein. In c steht dann der ASCII Code für das Zeichen
'5' drinnen, weil die ASCII Codes so angeordnet sind, dass die Codes für
die Ziffern alle aufeinander folgend sind. Und vom Code für '0'
ausgehend, 5 Codes weiter, landet man dann beim Code für '5'.
Du hast ja auch hier gerechnet
array[1].x='A' +rand()%26
wenn du dir nun von der Funktion zufall() eine 'Zufallszahl' berechnen
lässt, die zwischen den ASCII Codes für 'A' und dem ASCII COde von 'Z'
liegt, dann ist doch alles in Ordnung
array[1].x[0] = zufall( 'A', 'Z' );
zufall interessiert sich ja nicht dafür, was die Zahlen bedeuten, die du
als untere und obere Grenze mitgibst. Das können genausogut auch ASCII
Codes von Charactern sein :-) Und da du weißt, dass zufall nichts
ausserhalb dieses Bereichs liefern wird, kannst du das auch einfach
einem char zuweisen. Denn Zufall liefert dir eine Zahl (die aufgrund der
Argumente nur ein ASCII Code zwischen 'A' und 'Z' sein kann) und im char
werden genau solche ASCII Codes gespeichert.
char c = 65;
char c = 'A';
char c = 0x41;
char c = 0101;
char c = 0b01000001; // auf dem GCC
unterscheidet sich in nichts. Es sind nur unterschiedliche
Schreibweisen. Nach Abschluss der Operation hat das Byte c das Bitmuster
01000001.
Aber logischerweise nimmt man immer die Schreibweise, die die Absicht am
Besten ausdrückt. Aber abgesehen davon, sind alle diese Schreibweisen
untereinander austauschbar, eben WEIL sie alle genau die gleiche
Operation ausdrücken.