2012-01-26 42 views
0

私は多少言語(C)に新しいですが、私がやろうとしているのはかなり簡単です。私は確かに何かを無視したり、いくつかの論理的なエラーに走っていると確信しています。大文字レター数、小文字、空白数、下位から上位への変換 - C

私のプログラムでは、小文字、大文字、空白の数を数えたいと思っています。追加機能として、入力された小文字も大文字に変換します。この中

#include <stdio.h> 

int main(void){ 

    int iochar, numdigits=0, numlower=0, numupper=0, numwhites=0; 

    printf("Please enter a phrase:\n\n"); 

    while((iochar=getchar())!=EOF) { 
     if ((iochar=' ')||(iochar='\t')||(iochar='\n')){ 
      numwhites++; 
      putchar(iochar); 
     } 
     else if((iochar>='0')&&(iochar<='9')) { 
     numdigits++; 
     putchar(iochar); 
     } 
     else if(('a'<=iochar)&&(iochar<='z')) { 
      numlower++; 
      putchar(iochar-32); 
     } 
     else if(('A'<=iochar)&&(iochar<='Z')) { 
      numupper++; 
      putchar(iochar); 
     } 
     else 
      putchar(iochar); 
    } 

    printf("%d white characters, %d digits, ",numwhites,numdigits); 
    printf("%d lowercase have been converted to ",numlower); 
    printf("uppercase and %d uppercase.\n",numupper); 

    printf("\n\n"); 

    return 0; 
} 
+0

良い。そして、何が問題なのですか? – ouah

+0

=と==を区別することができない場合は、コーディング中に、比較中に定数を左に保ちます。例えばif( '' == iochar)。あなたはこのようにミスを避けることができます。 – yadab

+0

@yadab:そして比較の両辺が左辺値であるときに、どうやって間違いを避けるのですか? –

答えて

3
if ((iochar=' ')||(iochar='\t')||(iochar='\n')) 

あなたはiocharに割り当てると常に真となります。これは、比較する必要があります:

if ((iochar==' ')||(iochar=='\t')||(iochar=='\n')) 
0

isupper(int c)islower(int c)、およびctype.hで定義されているisspace(int c)に見てください。おそらく、同じファイルに定義されているtoupper(int c)tolower(int c)の恩恵を受けることもできます。

また、Saniの答えは、Cでの比較は==ですが、割り当ては=です。さらには内に割り当て可能なであり、あなたのような一般的なエラーも可能です。私の意見では、良い慣習は、このような比較を記述することです:

if ('\n' == iochar) 

この方法で、私はタイプミスをし、代わりにこれを書くためにした場合:

if ('\n' = iochar) 

私は中に構文エラーになるだろうランタイム中の奇妙な動作ではありません。

+0

代わりに、 'if(iochar = '\ n')'について警告するコンパイラを使用して、より明確に見える方法を書いてください。このリスクは偽の警告です。特に書いていないコードでは、警告を抑制するために変更したくないという点では、 –

+0

@ Steve:この場合gccは、警告を表示しないように括弧で代入してください。したがって、あなたが本当に代入をしたいのであれば 'if((iochar = '\ n'))'と書く。一般的なイディオムは 'malloc(2)'の 'if'の中でこのような割り当てスタイルを使います:' if(p = malloc(sizeof(* p))){)} '。 – cha0site

+0

実際、誰かが 'if(c = * str ++)'を書いた場合、警告を抑制するためにコードを 'if((c = * str ++))'に変更したくない場合があります。しかし、新しいコードではすべて正常に動作します。 –

0

私はSani Huttenenがあなたの質問をかなりうまく解決したと思います。私もあなたに電話することをお勧めします

putchar(iochar) 

あなたのお尻の終わりにちょうど1回...それは明らかになります。

関連する問題