gpt4 book ai didi

c - 我的字符频率程序似乎有一个无限循环

转载 作者:行者123 更新时间:2023-11-30 18:46:22 25 4
gpt4 key购买 nike

这是我对经典“C 编程语言”练习 1-14 的解决方案。它应该返回输入中字符的频率。它确实这样做了,但它一直打印完整的频率列表,直到编译器停止。我试图找到无限循环的根源。它在哪里?

#include <stdio.h>

char j;
int i;
int tally;
char input[100];
int k;

int main ()
{
for (k = 0; k < 100; k++)
{
input[k] = getchar();
}

for (j = 0; j <= 127; j++)
{
tally = 0;
for (i = 0; i < 100; i++)
{
if (input[i] == j)
{
tally++;
}
}
if (tally != 0)
{
printf ("%c : %d times\n", j, tally);
}
}
return 0;
}

最佳答案

问题出在你的变量 j 上,其类型为 char :

for (j = 0 ; j <= 127 ; j++)

char 的系统上有符号,最大值为char127 ,这意味着j <= 127条件始终为真。

尽管您可以通过声明 j 来解决此问题如unsigned char ,有一个更好的方法来计算字符:创建一个包含 128 个计数器的数组,然后遍历 input[]一次:

unsigned char input[100];
int tally[128] = {0};
for (int i = 0 ; i < 100 ; i++) {
if (input[i] < 128) {
tally[input[i]]++;
}
}
for (int c = 0 ; c != 128 ; c++) {
if (tally[c] != 0) {
printf("%c : %d times\n", c, tally[c]);
}
}

关于c - 我的字符频率程序似乎有一个无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51952757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com