1

我有以下代码来计算输入字符串中每个字母的出现次数。while 循环正确执行。现在我已经arr[]包含了 'a's in arr[0]、'b's in等的数量arr[1]

但是,以下printf内容并未显示完整的内容arr。(下面给出的示例 o/p)。

如果我完全注释掉 while 循环,则printf可以打印所有 26 个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

6

CTRL-D 在 linux 和windows 上按下,CTRL-Z而不是CTRL-C在您想要结束输入字符时按下。

CTRL-C终止程序,因此不会发生更多处理,您也不会看到输出。

于 2013-07-20T08:45:33.047 回答
2

您没有EOF正确通过,在 Windows 上是Ctrl+ Z。另外,请记住,您的算法不会考虑大写字母。

于 2013-07-20T08:53:53.690 回答