0

私はk&rを介して作業しており、問題1-18に取り組んでいます。入力の各行からTRAILINGの空白とタブを削除し、完全に空白の行を削除するプログラムを作成します。私の考えは、各行を読み、スペースの数を数えることです。それが最初の空白の場合は、putcharを使用して印刷します。2番目のブランクがある場合は、それを印刷せず、スペースを0にリセットします。次に、読み通しを続けてスペースを削除します。

現時点では、少しずつ印刷しようとしているので、読み取ったものをすべて印刷するだけです。このプログラムを実行すると、ターミナルにこれらの��が2つ表示されます。ifステートメントまたはelseステートメントを誤ってネストするのに問題があると思います。以前にいくつかのエラーがありました。空白を削除するロジックを正しい方法で実行していますか?誰かが私を正しい方向に向けてコードを修正することができれば、私は感謝するでしょう。

#include <stdio.h>

main()
{
    int c, i, spaces;             /*c for input, i for counting*/

    i = 0;
    c = 0;
    spaces = 0;
    while ((c = getchar())!=EOF)
            if(spaces = 0 && c == ' ')
                    ++spaces;
                    putchar(c);
                    if(spaces >= 1)
                            spaces = 0;
            else {
                    putchar(c);
            }


}
4

2 に答える 2

2

試してみてください:

if(spaces == 0 && c == ' ')
{
   ++spaces;
   putchar(c);
   if(spaces >= 1)
      spaces = 0;
}
else 
{
   putchar(c);
}

あなたのインデントは、ブランチを最初の if に合わせたいことを示唆していますelseが、現在のように、それは inner に対応していifます。

また、spaces = 0割り当て、spaces == 0比較です。

于 2012-08-24T13:27:43.027 に答える
0
  • 文字列を読み取ります。
  • strlen() または同様のメソッドを使用して文字列の末尾を見つけます。
  • for(i=string_length-i; i>=0; i--) または、必要に応じてポインターを使用します。
  • スペース以外が最初に見つかった時点でループを中断します。
  • 最初の非スペース + 1 にヌル終端を挿入します。
于 2012-08-24T14:10:30.577 に答える