2016-04-15 9 views
-1

Kürzlich habe ich an einer Übung aus K & Rs C Buch, das heißt: Schreiben Sie ein Programm, um nachstehende Leerzeichen/Tabs aus jeder Zeile der Eingabe zu entfernen, bla bla bla. Ich habe eine Menge versucht .! mithilfe von Funktionen Möglichkeiten und funktionierten nicht so habe ich beschlossen, alles in main() gesetzt und es funktioniert einfach nicht entweder Hier ist der Code:Programm zum Entfernen nachstehender Leerzeichen funktioniert nicht! :(

#include <stdio.h> 
#define MAX_INPUT 100 
#define ACTIVE 1 //quit with Ctrl + C 

void main(){ 
    int i, nb, nt; 
    char c; 
    char line[MAX_INPUT]; 
    char corrected[MAX_INPUT]; 

    while(ACTIVE){ 
     //get current line 
     for(i = 0; i < MAX_INPUT - 1 && (c = getchar()) != EOF && c != '\n'; i++) 
      line[i] = c; 
     if(c == '\n'){ 
      line[i] = c; 
     } 
     line[i + 1] = '\0'; 

     //correct current line 
     nb = nt = 0; 
     for(i = 0; line[i] != '\0'; i++){ 
      if(line[i] == ' '){ 
       nb++; 
       if(nb == 1) 
        corrected[i] == line[i]; 
      } 

      else{ 
       if(line[i] == '\t'){ 
        nt++; 
        if(nt == 1) 
         corrected[i] == line[i]; 
       } 

       else 
        corrected[i] == line[i]; 
      } 
     } 
     corrected[i] == '\n'; 
     corrected[i + 1] == '\0'; 

     //print corrected line 
     printf("%s", corrected);  
    } 
} 

Also, als ich die "drucken möchten korrigierte "Version der aktuellen Zeile, druckt es stattdessen:

Ich würde wirklich die Hilfe zu schätzen wissen . Ich habe dies die ganze Woche versucht und es macht mich verrückt die Tatsache, dass ich den Fehler nicht finden kann xD Vielen Dank für Ihre Aufmerksamkeit, Leute! :)

+0

Sie sollten ernsthaft in einige statische Analyse (Linting) oder bessere Compiler-Flags investieren. Platziere dein Programm in meinem Editor, bevor ich es kompiliere bekomme ich [5 Warnungen und 5 Notizen] (http://i.imgur.com/SiYKEsV.png) von 'clang'. 'gcc bad.c -Wall' zeigt [ähnliche Warnungen] (http://hastebin.com/xayuyixufa). – Oka

+0

Kernighan und Ritchie würden sagen, dass es "int main" ist. –

Antwort

1

ändern

corrected[i] == line[i]; 
corrected[i] == '\n'; 
corrected[i + 1] == '\0'; 

zu

corrected[i] = line[i]; 
corrected[i] = '\n'; 
corrected[i + 1] = '\0'; 

== ein Gleichheitsoperator ist, während = ein Zuweisungsoperator ist.

+0

Nun, jetzt macht es etwas! Es wird nicht der Rest der Zeile gedruckt, nur das erste Wort, aber das wäre ein anderes Thema. Vielen Dank, Kumpel! –

1

Sie verwenden den Vergleichsoperator == anstelle des Zuweisungsoperators =.

+0

Danke für deine Antwort, Kumpel! Aber ich verstehe es nicht. Wie ist es überfüllt? Ich habe die Korrektur vorgenommen, und es gibt keinen Unterschied. –

+0

Nein, es tut mir leid, ich habe es bearbeitet. – Ouss4

+0

Keine Sorge! Ich habe es jetzt :) Ich bekomme einfach nicht das Überlauf-Ding. –