在int main()中调用多次调用的函数中的变量(在C中)

时间:2016-02-02 17:23:36

标签: c function variables counter declaration

如标题中所述,我正在处理一个在main中多次调用的函数,它的目的是计算字符数组中的元音,结果只有在第一次被调用时才是正确的。之后不是从零开始,它从中断处开始计数,导致不正确的结果。

这是功能:

int function(char *pointer, int num_of_elements)

{
    int i=0;
    if (num_of_elements==0) return i;
    if ((*pointer== 'a') || (*pointer== 'A') || (*pointer== 'e') || (*pointer== 'E') || (*pointer== 'i') || (*pointer== 'I' )||( *pointer=='o') || (*pointer =='O') || (*pointer== 'u') || (*pointer== 'U')) {i++;}
    pointer++;
    num_of_elements--;
    return function(pointer,num_of_elements);
} 

指针指向字符数组,变量i指示计数器。

1 个答案:

答案 0 :(得分:1)

您必须返回i的总和以及function递归调用的结果。像这样调整你的代码:

#include <ctype.h>

int function(char *pointer, int num_of_elements)
{
    if (num_of_elements==0)
        return 0;

    char c = tolower( *pointer );
    int i = ( c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' ) ? 1 : 0;
    pointer++;
    num_of_elements--;
    return i + function( pointer, num_of_elements );
}

我建议您在循环中解决您的探针并使用函数tolower

#include <ctype.h>

int function(char *pointer, int num_of_elements)
{
    int count = 0;
    for ( int i = 0; i < num_of_elements; i++, pointer ++)
    {
       char c = tolower( *pointer );
       if ( c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' )
           count ++;
   }
   return count;
}