请问c语言中使用模块化为什么会导致结果不同?

这个是不使用模块化的程序
#include
#include
#include
int main(void)
{
int ch, word, alpha;
double result;
alpha = word = 0;
bool inword = false;

while ((ch = getchar()) != EOF)
{
    if (isalpha(ch))
        alpha++;
    if (isalpha(ch) && !inword)
    {
        inword = true;
        word++;
    }
    if (!isalpha(ch) && inword)
        inword = false;
}
result = alpha / word;
printf("%d word and %d alpha,per %.2lf alpha in a word.", word, alpha, result);
getchar();
getchar();
return 0;

}
调试结果正常
然后我使用模块化
#include
#include
#include
int get_word(char ch);
int get_alpha(char ch);
int main(void)
{
int ch,word,alpha;
double result;

while ((ch = getchar()) != '#')
{
    word = get_word(ch);
    alpha = get_alpha(ch);
}
result = (float)alpha / (float)word;
printf("%d word and %d alpha,per %.2lf alpha in a word.", word, alpha,result );
getchar();
getchar();
return 0;

}

int get_word(char ch)
{

int word1=0;
bool inword = false;
if (isalpha(ch) && !inword)
{
    inword = true;
    word1++;
}
if (!isalpha(ch)&&inword)
    inword = false;
return word1;

}

int get_alpha(char ch)
{

int alpha1=0;
if (isalpha(ch))
    alpha1++;
return alpha1;

}
调试结果全是1
请问这是怎么回事?

4个回答

bool inword = false;

int get_word(char ch)
{
int word1=0;

if (isalpha(ch) && !inword)
{
inword = true;
word1++;
}
if (!isalpha(ch)&&inword)
inword = false;
return word1;
}
int get_alpha(char ch)
{
int alpha1=0;
if (isalpha(ch))
alpha1++;
return alpha1;
}

int main(void)
{
int ch,word = 0,alpha = 0;
double result;
while ((ch = getchar()) != '#')
{
word += get_word(ch);
alpha += get_alpha(ch);
}
result = (float)alpha / (float)word;
printf("%d word and %d alpha,per %.2lf alpha in a word.", word, alpha,result );
getchar();
getchar();
return 0;
}

qq_36599218
humanint 非常感谢,我之前把bool inword = false;放到main里了
3 年多之前 回复
     word = get_word(ch);
    alpha = get_alpha(ch);
        ->
        word += get_word(ch);
    alpha += get_alpha(ch);
qq_36599218
humanint x谢谢,这样该的话,alpha正常,但是word有问题,word不显示单词的数量,显示的是字母的数量
3 年多之前 回复

int get_word(char ch)
{
int word1=0;
bool inword = false; //模块化后这个值每次都是 false word1 当然每次都是 加1 ,请把这个值做为全局变量。。
if (isalpha(ch) && !inword)
{
inword = true;
word1++;
}
if (!isalpha(ch)&&inword)
inword = false;
return word1;
}


qq_36599218
humanint 谢谢,但是我把bool inword = false;作为全局变量后alpha还是现实的是字母数
3 年多之前 回复

头文件是stdio.h ctype.h stdbool.h,不知道为什么发上去就没有了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐