2017-10-05 7 views
1

Ich versuche ein einfaches Programm mit getchar/putchar-Operatoren zu schreiben. Es muss Text in Zeilen erhalten und jeden Satz aus der neuen Zeile ausdrucken.Ein Programm mit "getchar/putchar", das Textzeilen nimmt und jeden Satz aus einer neuen Zeile druckt

schrieb ich diesen Code, aber es funktioniert für mich unerwartet, zum Beispiel ich

schrieb
"I can't program. Help me. Please." 

es ausdruckt: ""

I can't program. 
. Help me. 
. Please. 

Warum es zu duplizieren ??? Mein Code ist:

#include <stdio.h> 
#include <stdio.h> 


int main(void) { 
    int stop=0; 
    int i; 
    printf("enter your text: "); 
    while((i=getchar())!=EOF){ 
     if(i=='.') 
     { 
      stop=1; 
      putchar(i); 
      putchar('\n'); 
     } 
     if(i==' ') 
     { 
      if(stop==0) putchar(i); 
     } 

     else if(i!=' '||i!='.') 
     { 
      putchar(i); 
      stop=0; 
     } 
    } 
    return 0; 
} 

Vielen Dank im Voraus.

Antwort

0

Dies:

else if(i!=' '||i!='.') 

macht keinen Sinn, bedeutete Sie

else if(i != ' ' && i != '.') 
+0

ohhh zu verwenden. Ich wusste, dass irgendwo in diesem Code ein kleiner Fehler lag !! Vielen Dank! –

1

A, aber der Neuformatierung zu den Fehler versteheni enthält ein

if(i == '.') { 
    stop = 1;      // part A 
    putchar(i); 
    putchar('\n'); 
} 

if(i == ' ') { 
    if(stop == 0) {     // Part B 
     putchar(i); 
    } 
} else if(i != ' ' || i != '.') { 
    putchar(i);      // Part C 
    stop = 0; 
} 

Wenn char würde helfen Punkt,

  • Teil A ausgeführt (und der Punkt gedruckt wird)
  • der Test gegen Raum versagt
  • und dann wird der sonst Teil
  • ausgeführt

Im anderen Teil, der Test immer erfolgreich ist, weil Sie ein "oder" anstelle von "und" schreiben. So wird der Punkt erneut gedruckt. von Teil C.

Wie es beheben: in Ihrem Problem gibt es 3 Fälle (Punkt, Raum, andere) und Sie sollen die gleichen comparaison zweimal auszudrücken vermeiden.

Eine Möglichkeit ist eine Reihe von if/else-if/...

if (i == '.') { 
    // process dot 
} else if (i == ' ') { 
    // process space 
} else { 
    // process other 
} 

Eine bessere Lösung ist ein Schalter

switch (i) { 
case '.': 
     // process dot 
     break; 
case ' ': 
     // process space 
     break; 
default: 
     // process other 
     break; 
} 
Verwandte Themen