2016-04-09 17 views
1

Ich schreibe diesen Code, um zwei Zeichenfolgen zu vergleichen. Der Code funktioniert, mein einziges Problem ist es, die Konsole nach dem Beenden offen zu halten. Normalerweise funktioniert getchar() wie ein Zauber, aber in diesem Fall ist es einfach unwirksam. Ich denke, das liegt an den if-else-Funktionen. Wie halte ich die Konsole offen?getchar() wird die Konsole nicht geöffnet

#include <stdio.h> 
#include <string.h> 
#define SIZE 50 

int main (int argc , char** argv) { 
    char isim[SIZE]; 
    printf("Adinizi yazin:\n"); 
    scanf("%s", isim); 
    if(strcmp(isim, "Cihan") == 0) 
     printf("Hosgeldiniz!\n"); 
    else 
     printf("Cihan degilsiniz. Lutfen programi terk edin.\n"); 
    getchar(); 
    return 0; 
} 

Antwort

1

So stellen zwei verwenden getchar(), eine nach der anderen. scanf() entfernt das Newline-Zeichen nicht aus dem Eingabepuffer, so "isst" zuerst getchar() diese Newline. Die zweite getchar() wartet auf die nächste Eingabe, wodurch die Konsole geöffnet bleibt.

Von scanf() Seite in cplusplus.com:

die Funktion lesen und ignorieren keine Leerzeichen vor den nächsten Nicht-Leerzeichen angetroffen Zeichen (Leerzeichen Leerzeichen, Zeilenumbruch und Tabulatorzeichen - siehe Isspace).

Hervorhebung von mir.

+1

Danke! Es funktionierte. –

+0

Gern geschehen! Sie können mehr über den Link erfahren, den ich zur Verfügung gestellt habe. –

0

Sie Anweisung verwenden: getch(); in conio.h Header. getch() nicht lesen Zeichen im Puffer, es liest Zeichen direkt von der Tastatur. Die Konsole wird also geöffnet, wenn Sie noch nicht eingegeben haben. getchar() lesen Sie das Zeichen aus dem Puffer, eine neue Zeile in Ihrem Eingabepuffer nach scanf() nicht im Puffer gelesen und gespeichert werden. Dann getchar() wird lesen newline und Anweisung zu stoppen, wird die Konsole geschlossen.

+1

Warum? Wie unterscheidet es sich von 'getchar()'? – hyde

+0

Bitte beschreiben Sie für den Nutzen des OP, was das Problem ist und wie Ihre Antwort es löst. – MikeC

+0

Weil 'getch()' nicht '\ n' im Puffer lesen wird, wenn eine Eingabezeichenfolge eingegeben wird. –

0
#include <stdio.h> 
#include <string.h> 
#include <conio.h> 
#define SIZE 50 

int main (int argc , char** argv) { 
char isim[SIZE]; 
printf("Adinizi yazin:\n"); 
scanf("%s", &isim); 
if(strcmp(isim, "Cihan") == 0) 
    printf("Hosgeldiniz!\n"); 
else 
    printf("Cihan degilsiniz. Lutfen programi terk edin.\n"); 
getch(); 
return 0; 
} 
+1

Wie sind getch() und getchar() anders? Ich sehe, dass Sie conio für getch verwenden. Was ist der Unterschied? –

0

Die Eingabe in das Programm nach einer Neuen-Zeile gesendet wird, aber

scanf("%s", &isim); 

verläßt die Neue-Zeile in dem Eingangspuffer, da das Format %s stoppt, wenn das erste Leerzeichen nach einiger nicht angetroffen wird, Leerzeichen. getchar() gibt dann diesen Zeilenumbruch sofort zurück und wartet nicht.

Um Ihren Code zu arbeiten, versuchen, so etwas wie dies

scanf("%s", &isim); 
while(getchar() != '\n'){ 
    /* flush to end of input line */ 
} 
+0

Danke! Ich bin wirklich nur ein Anfänger und es gibt einige grundlegende Dinge, die ich nicht kenne. Ihre Erklärung wird sehr geschätzt. –

+0

Akzeptieren Sie die Antwort :) – Subhiksh

Verwandte Themen