Lesen eines einzelnen Zeichens in C

Lesezeit: 2 Minuten

Benutzeravatar von g3d
g3d

Ich versuche, ein Zeichen von der Konsole zu lesen (innerhalb einer While-Schleife). Aber es liest sich mehr als einmal.

Eingang:

a

Ausgabe:

char : a  char : char : '

Code:

while(..)
{
    char in;
    scanf("%c",&in);
}

Wie kann ich nur ‘a’ lesen?

Benutzeravatar von PP
PP

scanf("%c",&in);

hinterlässt einen Zeilenumbruch, der in der nächsten Iteration verwendet wird.

Ändern Sie es in:

scanf(" %c",&in); // Notice the whitespace in the format string

was Scanf mitteilt, Leerzeichen zu ignorieren.

ODER

scanf(" %c",&in);
getchar(); // To consume the newline 

  • Eigentlich möchte ich ein Char-Array erstellen. Haben Sie eine Idee dazu? (Eingabegröße ist ungewiss). Danke!

    – g3d

    19. Januar 2013 um 23:36 Uhr


  • @vkeles: 1) Ordnen Sie beispielsweise ein Array mit einer Anfangsgröße zu n verwenden malloc 2) Lesen Sie Zeichen in das Array, bis es nicht überschreitet n 3) Wenn n Zeichen gelesen werden und Sie mehr als die doppelte Größe des Arrays lesen möchten realloc. Diese Methode wird im Allgemeinen befolgt, um zu vermeiden, dass realloc zu häufig aufgerufen wird. Andernfalls können Sie die Neuzuordnung mit Ihrer bevorzugten Größe durchführen.

    – PP

    19. Januar 2013 um 23:48 Uhr


Um nur ein Zeichen zu lesen, verwenden Sie getchar stattdessen:

int c = getchar();
if (c != EOF)
  printf("%c\n", c);

Benutzeravatar von Manolis Ragkousis
Manolis Ragkousis

in scanf("%c",&in); Sie könnten ein Zeilenumbruchzeichen hinzufügen \n nach %c um die zusätzlichen Zeichen zu absorbieren

scanf("%c\n",&in);

  • Ich konnte scanf(“%c\n”, &in) nicht abrufen; richtig zu arbeiten. Dies funktioniert jedoch: scanf(” %[^\n]%*c”, &in); Das %*c weist scanf an, alles zu lesen und zu verwerfen, was im Eingabepuffer verblieben ist, einschließlich Zeilenumbrüche. Es ist immer eine gute Praxis, direkt nach dem ersten in scanf verwendeten ” ein Leerzeichen einzufügen. Wenn Sie jedoch das vom Benutzer eingegebene Weiß erhalten möchten (z. B. Leerzeichen vor der Eingabe von anderem Text), lassen Sie das Leerzeichen nach dem ersten ” in scanf() weg.

    – RobK

    16. Juli 2021 um 15:59 Uhr

konnte man immer gebrauchen char a = fgetc (stdin);. Unkonventionell, funktioniert aber genauso getchar().

du kannst das so machen.

char *ar;
int i=0;
char c;
while((c=getchar()!=EOF)
   ar[i++]=c;
ar[i]='\0';

Auf diese Weise erstellen Sie einen String, aber eigentlich ist es ein Char-Array.

  • Beachten Sie, dass dieses Beispiel weder Speicher für das Zeichen-Array zuweist noch den Anfangswert von ar festlegt, sodass es an eine praktisch zufällige Stelle im Speicher schreibt und alles überschreibt, was dort vorhanden ist.

    – Douglas

    20. Januar 2013 um 10:27 Uhr

  • Danke. Ich vergesse wirklich, es mir zur Gewohnheit zu machen, eine Zeigervariable zu initialisieren

    – Cocoo Wang

    20. Januar 2013 um 16:40 Uhr

  • Beachten Sie, dass dieses Beispiel weder Speicher für das Zeichen-Array zuweist noch den Anfangswert von ar festlegt, sodass es an eine praktisch zufällige Stelle im Speicher schreibt und alles überschreibt, was dort vorhanden ist.

    – Douglas

    20. Januar 2013 um 10:27 Uhr

  • Danke. Ich vergesse wirklich, es mir zur Gewohnheit zu machen, eine Zeigervariable zu initialisieren

    – Cocoo Wang

    20. Januar 2013 um 16:40 Uhr

1432900cookie-checkLesen eines einzelnen Zeichens in C

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy