1

課題は、入力内のさまざまな文字のヒストグラムを出力することでした。下部にあるコードは、さまざまな文字を 3 つのカテゴリ a、b、またはその他に分割して、コードが成功した場合に文字のより多くのカテゴリを推定するコードです。ab cdしかし、期待する入力など、必要な出力がありません

  x
xxx
---
abo
  t
  h
  e
  r

しかし、私が得るのは

---
abo
  t
  h
  e
  r

これが私の試みです:

#include<stdio.h>

main()
{
int i,c,b, max;
int array[3] = {0,0,0};


while( (c = getchar()) != EOF){
    if(c== 'a')
    ++array[0];
    else if(c== 'b')
    ++array[1];
    else if(c=='\n' ||c=='\t' || c==' '){}
    else ++array[2];
    }

array[0]=max;
i=0;

 while(i<3){
    if(max>=array[i])
        {}
    else array[i]=max;

    ++i;
 }

i=0;
max=b;
while(i<b){
    if(array[0]>=max){
        putchar('x');}
    else putchar(' ');


    if(array[1]>=max) {
        putchar('x');}
    else putchar(' ');


    if (array[2]>=max){
        putchar('x\n');}
    else putchar(' \n');
    --max;
    ++i;


    }

printf("---\nabo\n  t\n  h\n  e\n  r");


}
4

2 に答える 2

5

あなたのコードにはかなりの誤りがあります。

  1. 決してしません -main()

    int main(void){...} see this answerを使用する必要があります。

  2. コードに数字をハードコーディングしています。代わりに定数変数を提供してください。これには論理的な例外がありますが、数字には通常意味があるので、それを述べてください。
    unsigned const int LETTERS = 3;

  3. array[0]の出現回数をインクリメントするのに時間がかかりますが、その値を使用したり、他の場所に保存したりせずに、その直後に'a'の値を割り当てます。max

  4. array[0]最初の後に割り当てますがwhile(){...}max初期化されていないため、「ガベージ」です。

  5. ここで -if(max>=array[i]){}あなたは体に何もしませんか??

  6. maxあなたは値を割り当てますb-再び「ガベージ」!

  7. あなたはreturn ...;あなたのmain機能からすべきです。そこにあるオプションを自分で確認する必要があります。注: 「1.」に従う場合。これに従うしかないでしょう。

  8. 「実際の」コードではない場合、投稿のフォーマットは望ましくありません(つまり、非常に読みにくい.

それらを修正すれば、おそらく問題は解決します。

于 2013-07-12T23:08:04.020 に答える
1

変化する

  • array[0] = maxmax = array[0] (そうでなければmax、ガベージ値を取ります)

  • max = bb = max (そうでなければb、ガベージ値を取ります)

  • putchar('x\n'){ putchar('x'); putchar('\n')}(一度に 1 文字しか印刷されませんが、以前は 2 つの文字一緒に印刷していた
    ことに注意することが重要です!)putchar()putchar('x\n')x\n

その後、プログラムは目的の出力を提供します。
上記の変更を加えた作業コードは次のとおりです。

#include<stdio.h>

int main()
{
    int i,c,b, max;
    int array[3] = {0,0,0};


    while( (c = getchar()) != EOF){
       if(c == 'a')
            ++array[0];
       else if(c == 'b')
            ++array[1];
       else if(c =='\n' || c =='\t' || c == ' ')
            ;
       else ++array[2];
    }

 max = array[0];
 i=0;

 while(i<3){
    if(max < array[i])
        max = array[i];
i++;        
}

i=0;
b = max;
while(i < b){
    if(array[0] >= max)
        putchar('x');
    else 
        putchar(' ');


    if(array[1] >= max)
        putchar('x');
    else 
        putchar(' ');


    if (array[2] >= max)
    {
        putchar('x');
        putchar('\n');
    }
    else 
        putchar('\n');
    --max;
     ++i;


  }

printf("---\nabo\n  t\n  h\n  e\n  r");

return 0;
}
于 2013-07-12T23:12:16.740 に答える