2012-03-14 6 views
0

私はこのコードの平和に問題があり、小文字を大文字に変更し、複数のスペースを1つのスペースに変える必要があります。だから間違って、何とか私は "abcdefg"それは出力 "BCDEFG"私を与えて書くような最初の文字を切り捨てる。Putchar、getchar、whileループで文字が欠けています

main(){ 
int z=0,b; 

     while ((b = getchar()) != '\n') 
     { 
     b=b-32; 
      if (b>0) 
      { 
       putchar(b); 
      } 
      else 
      { 
       if (z>=2) 
       { 
        putchar(b); 
       } 
       else 
       { 
        z=z+1; 
        printf(" "); 
       } 
      } 


     } 
} 
+2

デバッグを試しましたか? –

+2

'宿題 'タグが必要ですか? –

答えて

0

私はすべての文字を生成しているようです...入力した文字で各ステップで何をしているのか調べるようにしましたか?

+0

うわー、どういうことか分かりませんが、今はうまくいきます。とにかく、ありがとうございます。 – user1267757

0

空き領域の処理にはいくつか問題があります。

いずれの場合でもスペースを表示しているようです(getcharが0x20を返す)。

0

あなたのスペースの問題を解消するためにこれを行うことができます。 そうでなければ、問題のある入力がありますか?なぜなら私には「最初の文字カット」問題がないからです。

main(){ 
int z=1,b; 

     while ((b = getchar()) != '\n') 
     { 
     b=b-32; 
      if (b>0) 
      { 
       putchar(b); 
       z=1; 
      } 
      else 
      { 
       if (z>=2) 
       { 
        putchar(b); 
       } 
       else 
       { 
        z=z+1; 
        printf(" "); 
       } 
      } 


     } 
} 
0

まず、 "32"のような定数を使用してはならず、代わりに値が何であるかをシステムに定義させるべきです。 IE:b - = char( '');

次に、関数 "islower()"と "toupper()"を見て、Cが自動的にそれを行います。

は、このようなものを考える:

メイン() {

int  flag = 0; 
    char b; 

    while ((b=getchar()) != '\n') { 
      if (flag && isspace(b)) 
        continue; 
      putchar(toupper(b)); 
      if (isspace(b)) { 
        flag = 1; 
        continue; 
      } 
      flag = 0; 
    } 
    putchar('\n'); 

}

入力を含む:

出力 "BCがDEF 123 a1b2c3をghijghg" : "A BC DEF GHIJGHG 123 A1B2C3"

注:テキストボックスには、入力行に空白がたくさんあるため、空白が削除されているようです。

境界条件には常に注意が必要です。入力が開始されると、一連のスペースはまだ1つのスペースを印刷します。すべての先頭のスペースを削除するには、flag = 1を初期化します。入力に末尾のスペースがある場合は、最後のスペースも表示されます。それらを排除するには、スペースと印刷可能な別の文字が表示された後にスペースを印刷する、少し異なるソリューションが必要です。

関連する問題