【问题标题】:Declaring variables in functions that are called more than once in int main() (in C)在 int main() 中多次调用的函数中声明变量(在 C 中)
【发布时间】:2016-02-02 17:23:35
【问题描述】:

如标题所述,我正在处理一个在 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是计数器。

【问题讨论】:

  • 我很惊讶这是第一次工作。您正在递归地执行此操作,这有点奇怪,但没有保留 i 从调用到调用的当前值。我会期待return (i+function(pointer, num_of_elements));
  • @intersomnium 您使用递归(函数调用本身)有什么具体(可能是纯粹的学术)原因吗?如果不是,那么这是一项重大罪行;)
  • 是的,就是这样,作为回报,我失踪了,谢谢。 :)
  • 第一次成功是因为在我的实际函数中我写了 static int i;但是在这里发布问题时,我忘了写静态部分..
  • @gollum 哈哈,是的,有。这是在考试题中指定的。

标签: c function variables counter declaration


【解决方案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;
}

【讨论】:

  • 我正在处理一个考试问题,其中指定函数必须是递归的,否则我喜欢第二种解决方案。第一个有一些尚未发现的元素(对我来说),因为我是 C 的初学者,但我会记住它。谢谢你。 :)
猜你喜欢
  • 2017-05-13
  • 2017-10-11
  • 2014-11-27
  • 1970-01-01
  • 1970-01-01
  • 2021-08-11
  • 1970-01-01
  • 1970-01-01
  • 2020-04-05
相关资源
最近更新 更多