我有以下代码来计算输入字符串中每个字母的出现次数。 while循环正确执行。现在我arr[]
包含arr[0]
中的'a',arr[1]
中的'b'等等。
但是,以下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]);
}
}
答案 0 :(得分:6)
如果要结束输入字符,请在Linux上按CTRL-D
,在Windows上按CTRL-Z
而不是CTRL-C
。
CTRL-C
终止程序,因此不再进行处理,您将看不到输出。
答案 1 :(得分:2)
您没有正确传递EOF
,在Windows上它是 Ctrl + Z 。另外,请记住,您的算法不会考虑大写字母。