2016-04-15 14 views
-1

最近私はK & R's Cの本からの練習に取り組んでいます:入力の各行から末尾の空白/タブを削除するプログラムを書く、bla bla bla 私はたくさんの方法の機能を使用して動作しませんでしたので、私は、メインの内側にすべてを置くことにしました()とそれだけでいずれも動作しません。ここでは、コードです:。!末尾の空白を削除するプログラムは機能しません! :

#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);  
    } 
} 

は、私は "を印刷したい時で、だから、現在の行の「修正済み」バージョンであれば、代わりに以下を出力します:

本当に助けていただければ幸いです。私は一週間中これを試してきましたが、それは私がエラーを見つけることができないという事実を私に夢中にさせています。xD あなたの注目を集めてくれてありがとう! =が代入演算子ある間:)

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

==

+0

静的解析(linting)や、より良いコンパイラフラグに真剣に投資する必要があります。エディタにプログラムを置いて、コンパイルする前に、「clang」から[警告5件、メモ5件](http://i.imgur.com/SiYKEsV.png)を取得します。 'gcc bad.c -Wall'は[同様の警告](http://hastebin.com/xayuyixufa)を示しています。 – Oka

+0

KernighanとRitchieは、それが 'int main'と言うでしょう。 –

答えて

1

変更

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

は、等価演算子です。

+0

さて、それは今何かをする!それはラインの残りの部分を印刷するのではなく、ちょうど最初の単語ですが、それは別のトピックになります。どうもありがとう、仲間! –

1

代入演算子=ではなく、比較演算子==を使用しています。

+0

あなたの答えをありがとう、仲間!しかし、私はそれを取得しません。どのように溢れていますか?私は訂正をしましたが、違いはありません。 –

+0

いいえ、申し訳ありません、私は編集しました。 – Ouss4

+0

心配はいりません!私は今それを得た:)私はちょうどオーバーフロー事を得ない。 –

関連する問題