C语言 我的自定义函数只工作一次,当我第二次使用该函数时,自定义函数中相同的布尔表达式不评估为真 &g



问题是,当我试图在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:我知道我可以在不使用抽象的情况下实现所有这些,但我想看看我如何以这种方式做到这一点,结果我卡住了

该函数用1s覆盖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;
}

相关内容

  • 没有找到相关文章

最新更新