1

入力文字列内の各文字の出現回数をカウントする次のコードがあります。while ループは正しく実行されます。これで、'a's in 、'b's inなどarr[]の数が含まれるようになりました。arr[0]arr[1]

ただし、次printfの例では の完全な内容は表示されませんarr。(サンプル o/p を以下に示します)。

while ループを完全にコメントアウトすると、printf26個のarr[]値すべてが正常に出力されます。この単純なプログラムには何が欠けているのでしょうか?

役に立ったら、私は VS 2008 を使用しています。

int arr[26]={'\0'};
int i = 0, c = 0, idx = 0, count = 0;
while( (c = getchar()) != EOF ) {
  if( 'a' <= c && 'z' >= c ) {
    idx = c - 'a';
    arr[idx] = arr[idx]+1;
  }
}
for(count = 0; count < 26; count++) {
  printf("arr[%d] = %d\n", count, arr[count]);
}

私が得る出力(入力ごとに変化し続けます):

abcxyz
arr[0] = 1
arr[1] = 1
^CPress any key to continue . . .

abcabc
arr[0] = 2
arr[1]
^CPress any key to continue . . .

@Nobilis:大文字を考慮してコードを更新し、印刷をより意味のあるものにしました:)

int main()
{
    int arr[26]={'\0'};
    int i = 0, c = 0, idx = 0, count = 0;
    while( (c = getchar()) != EOF )
    {
        if( 'a' <= c && 'z' >= c )
        {
            idx = c - 'a';
            arr[idx] = arr[idx]+1;
        }
        if( 'A' <= c && 'Z' >= c )
        {
            idx = c - 'A';
            arr[idx] = arr[idx]+1;
        }
    }
    for(count = 0; count < 26; count++)
    {

        printf("%c or %c = %d\n", ('A'+count), ('a'+count), arr[count]);
    }
}
4

2 に答える 2