In C Zeichen einlesen und als ascii code in variable speichern?

1 Antwort

Hallo,

Wenn du ein Zeichen einliest, ist dieses doch bereits als ASCII-Code gespeichert, sofern dein Computer die ASCII-Code-Tabelle verwendet (was der Fall sein sollte).

Das ist nun mal die Art und Weise, wie Computer Zeichen speichern. Gibst du das Zeichen aus, wird dieses nur aus dem entsprechenden ASCII-Code umgewandelt.

Hier ein simples Programm:

#include <stdio.h>

int main(void) {
  int c = getchar();
  printf("%d\n", c);
  return 0;
}

Das Programm gibt beispielsweise den korrekten ASCII-Code 65 für ein großes A aus.

LG

theooooo306 
Fragesteller
 19.10.2021, 17:50

Also, erstmal vielen Dank für deine Antwort. Hier einmal mein Code.

#include <stdio.h>

void print_square(int width, int height, int c);

int main(void)

{

    int h, w, c;

    printf("\nBitte wert für height eingeben: ");

    scanf("%i", &h);

    printf("\nBitte wert für width eingeben: ");

    scanf("%i", &w);

    printf("\nBitte Zeichen eingeben: ");

    scanf("%d", &c);

    print_square(w,h,c);

    return 0;

}

void print_square(int width, int height, int c){

    if (width < 0 && height < 0 && c >= 0 && c <= 127){

        return;

    }else{

        int i, j;

        for (i = 1; i <= height; i++){

            for (j = 1; j <= width; j++){

                printf("%c", c);

            }printf("\n");

        }

    }

}

0
theooooo306 
Fragesteller
 19.10.2021, 17:51
@theooooo306

Das Problem ist, dass bei der Ausgabe, wenn ich nun für den Eingabe Aufruf (für das Zeichen) zum Beispiel * eingebe, kein * am ende ausgegeben wird.

Gruß

0
HermCrafter  19.10.2021, 19:24
@theooooo306
width < 0 && height < 0 && c >= 0 && c <= 127

DIe Bedingung verstehe ich nicht:

Die Funktion kehrt sofort zum Aufrufer zurück, wenn die Breite kleiner 0 und die Höhe kleiner 0 und das eingegebene Zeichen ein ASCII-Zeichen ist?

Ich galube, das Ganze sollte so aussehen:

if ((width < 1 || height < 1) || c > 127) {...}

Ohne Breite keine Höhe, ohne Höhe keine Breite. Ein ASCII-Zeichen hat den Wert 0-127, also muss der Rest ausgeschlossen werden.

Hier ein Programm, das unter Windows einwandfrei funktioniert:

#include <stdio.h>

void print_square(int width, int height, int c) {
  if ((width < 1 || height < 1) || c > 127) 
    return;
  for (int i = 1; i <= height; i++) {
    for (int j = 1; j <= width; j++) {
      printf("%c", c);
    }
    printf("\n");
  }
}

int main(void) {
  int width, height, c;
  printf("Bitte Wert fuer width angeben: ");
  scanf("%d", &width);
  fflush(stdin);
  printf("Bitte Wert fuer height angeben: ");
  scanf("%d", &height);
  fflush(stdin);
  printf("Bitte Zeichen eingeben: ");
  c = getchar();
  print_square(width, height, c);
  return 0;
}

Bei Unklarheiten gerne fragen.

LG

0
HermCrafter  19.10.2021, 19:43
@theooooo306

Noch eine wichtige Information am Rande:

Die Funktion fflush existiert meines Wissen unter Linux nicht und dient dazu, die Standardeingabe zu leeren.

Das Problem ist, dass es unter Verwendung von scanf oder getchar Probleme beim Einlesen geben kann.

Du musst dir vorstellen, dass jedes Zeichen, das du auf der Tastatur tippst, in die Standardeingabe "geschrieben" wird. Wenn du die Eingabe nun mit Enter bestätigst und anschließend getchar aufrufst, wirst du feststellen, dass getchar einfach übersprungen wurde. Die Funktion macht nämlich nichts anderes, als Zeichen von der Standardeingabe zu lesen - und da hier noch Zeichen vorhanden sind, geschieht dies ohne manuelle Eingabe des Nutzers.

Möchtest du eine Funktion, die unter allen Betriebssystemen funktioniert, schreibe sie dir selbst.

Hier ein Beispiel:

void clear(void) {
  int c;
  do {
    c = getchar();
  } while(c != 10);
}

Die Enter-Taste wird durch den ASCII-Code 10 repräsentiert. Du liest also solange Zeichen von der Standareingabe mittels getchar ein, bis das Enter-Zeichen "raus" ist.

Ich hoffe, das war einigermaßen verständlich.

1