2010-12-31 7 views
0
#include <stdio.h> 

    #define IN 1 /* inside a word */ 
    #define OUT 0 /* outside a word */ 

    /* count lines, words, and characters in input */ 
    main() 
    { 
     int c, nl, nw, nc, state; 

     state = OUT; 
     nl = nw = nc = 0; 
     while ((c = getchar()) != EOF) { 
      ++nc; 
      if (c == '\n') 
       ++nl; 
      if (c == ' ' || c == '\n' || c = '\t') 
       state = OUT; 
      else if (state == OUT) { 
       state = IN; 
       ++nw; 
      } 
     } 
     printf("%d %d %d\n", nl, nw, nc); 
    } 

私はK & R本を手に入れましたが、コンパイルされないコードがいくつかあります。C:下記のコードはコンパイルできませんか?

それは私与え - 19 C:\ Users \ユーザーノム割り当てでデスクトップ\ Untitled1.c無効な左辺値\


編集:今、それは、おかげでみんなを動作しますが、今では何もしません! printfステートメントは機能しません。それはdosコンソールを開き、私は何でも入力して、新しい行を返します。私はDev-C++を使用しています。4.9.9.2


編集:私はprintfステートメントをwhileループの中に入れました。 if (c == ' ' || c == '\n' || c = '\t')に感謝

+0

"Cでなければなりません= '\ t' " – kenny

+2

また、' main'は戻り値の型がintでなければなりません。 – Falmarri

+3

それを信じるかどうか、コンパイラが与えるエラーメッセージは理由があります。この場合、割り当てがないと思われる行の割り当てが記述されています。だから、おそらくあなたはそれが少し間違っている場合、割り当てになるかもしれないものがあるかどうかを見るためにその行を見てください。 –

答えて

6

最後=はおそらく、あなたが最終的または句の=を逃している==

+0

ありがとう、今それはコンパイルしますが、何もしません! printfステートメントは機能しません。それはdosコンソールを開き、私は何でも入力して、新しい行を返します。 – heshim

+2

@heshim:stuffを入力し、EOFを送信します。私はそれがWindows上のCtrl + Zだと思います... K&Rは非常にUnix中心です。 – nmichaels

+0

あなたがEOFを入力するまでループしています。これはC言語ではctrl-dです。 –

2
 if (c == ' ' || c == '\n' || c = '\t') 

をする必要があり、

おそらくこの1つは==れるべき
 if (c == ' ' || c == '\n' || c == '\t') 
             ^^ here 
+0

ありがとう、今それはコンパイルしますが、何もしません! printfステートメントは機能しません。それはdosコンソールを開き、私は何でも入力して、新しい行を返します。 – heshim

+0

あなたが受け入れられた答えをアップヴォートする場合は、これも同様にアップしてください。私たちはほぼ同じ時に本質的に同じ答えを考え出しました。公正は公正です。 – RobertB

+0

いずれにしても大したことはありません。 –

関連する問題