问题是,当我试图在main中使用这个自定义函数两次时。
(count_letter(text))
不起作用。我创建的另一个自定义函数没有这个问题。
你可以看到我用了两次printf我把自定义函数作为输入基本上它显示了当我尝试使用函数&;count_letter(text)&;第二次进入
printf("(1)numbers of letters: %in", count_letter(text));
printf("(2)numbers of letters: %in", count_letter(text));
不起作用,如果你运行这个程序,它会打印一个0(这是不应该发生的)
int main(void)
{
string text = get_string("text: ");
printf("(1)numbers of letters: %in", count_letter(text));
printf("(2)numbers of letters: %in", count_letter(text));
printf("numbers of words: %in", count_word(text));
printf("numbers of sentences: %in", count_sentence(text));
int grades = compute_grade(count_letter(text), count_word(text), count_sentence(text));
}
这是给出这个问题的自定义函数
int count_letter(string words)
{
int totletters = 0;
for (int i = 0, n = strlen(words); i < n; i++)
{
if(islower(words[i]) || isupper(words[i]) )
{
words[i] = 1;
totletters += words[i];
}
}
return totletters;
}
当我使用一个工具来调试程序时基本上它告诉我布尔表达式
if(islower(words[i]) || isupper(words[i])
条件在这个自定义函数(count_letter(text))中,当我第二次使用for这个函数时,它的值不是真
为什么会发生这种情况?怎么解呢?
提前感谢您的时间。
p。S:我知道我可以在不使用抽象的情况下实现所有这些,但我想看看我如何以这种方式做到这一点,结果我卡住了
该函数用1
s覆盖words
字符串中的字母,因此下次在相同的输入中调用它时,结果是0
,因为您已经覆盖了所有的字母。
如果你停止覆盖它,你应该可以:
int count_letter(string words)
{
int totletters = 0;
for (int i = 0, n = strlen(words); i < n; i++)
{
if(islower(words[i]) || isupper(words[i]) )
{
totletters++; // totletters is updated directly, without modifying words
}
}
return totletters;
}