只是您的标准C入门程序。我正在尝试打印出用户输入的所有不同字符的直方图。
#include <stdio.h>
#define LIMIT 255
main(){
int asciiArray[LIMIT], input, outer, inner;
while((input = getchar()) != EOF){
asciiArray[input] = ++asciiArray[input];
//printf("%d\n", asciiArray[input]);
}
for(outer = 0; outer <= LIMIT; outer++){
if(asciiArray[outer] < 0){
putchar(outer);
printf("\t");
for(inner = asciiArray[outer]; inner > 1; inner--)
printf("*");
printf("\n");
}
else
;
}
}
这些是用户输入“h”时的结果:
h0
2
9
?
@
C
G
J
K
U
Z
a
b
h
j
l
n
q
}
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
答案 0 :(得分:6)
对于初学者,您没有初始化asciiArray
,因此它可能包含所有内容。
尝试memset(asciiArray, 0, sizeof(asciiArray));
或int asciiArray[LIMIT] = {0}
。
此外,您可以将while中的增量简化为:asciiArray[input]++
。
for
看起来很可疑(特别是它如何访问asciiArray[255]
)。更重要的是,我看不出asciiArray[outer]
如何小于0
或许你的意思是>
?。
答案 1 :(得分:3)
LIMIT应该设置为256,然后for循环应该
for(outer = 0; outer < LIMIT; outer++)
否则你要走出阵列。
正如其他人所提到的,应该初始化数组。
稍后在if语句中,它还检查该值是否小于零而不是大于。 它应该是:
if(asciiArray[outer] > 0)
并且第二个for语句是一个(假设你试图为每个角色的实例显示一个星)。它应该是:
for(inner = asciiArray[outer]; inner >= 1; inner--)
答案 2 :(得分:0)
您必须将ascii数组初始化为0;
i = 0;
while (i < LIMIT)
{
a[i] = 0;
i++;
}