用函数实现c语言中的递归计数

用函数实现c语言中的递归计数,c,C,我试图做一个递归程序,但它不起作用。 在teks中计数的程序。 例如: input: abcde1234 及 这是我的代码: #include<stdio.h> int count_digits(char s[]); int main (){ char x[1000]; printf("input string (max 1000 character): "); scanf("%s", &x);

我试图做一个递归程序,但它不起作用。 在teks中计数的程序。 例如:

input:
abcde1234

这是我的代码:

#include<stdio.h>

int count_digits(char s[]);

int main (){
    
    char x[1000];
    printf("input string (max 1000 character): ");
    scanf("%s", &x);
    printf("number of digits in the text = %i", count_digits(x));
    return 0;
    
}
int count_digits(char s[]){
    int j, digits=0;
    
    for (j=0; s[j] !='0'; j++)
    {
        if(s[j] >= '0' && s[j] <= '9'
        {
            digits++;
        }
    }
    
    
    
}
#包括
整数计数(字符s[]);
int main(){
char x[1000];
printf(“输入字符串(最多1000个字符):”;
scanf(“%s”和&x);
printf(“文本中的位数=%i”,计数_位数(x));
返回0;
}
整数计数\u位数(字符s[]{
int j,数字=0;
对于(j=0;s[j]!='0';j++)
{

如果(s[j]>='0'&&s[j]您必须返回计算值。在函数末尾添加:

return digits;
顺便说一下,您的程序不是用递归方法编写的

应该是这样的:

int count_digits(char s[]){

if (!*s)
    return 0;
return (*s >= '0' && *s <= '9') + count_digits(s+1);
}
int计数\u位(字符s[]{
如果(!*s)
返回0;
返回(*s>='0'&&*s
  • scanf(“%s”和&x);
    通过传递类型错误的数据来调用未定义的行为。应删除
    &
  • 循环条件
    s[j]!='0'
    错误。它应该是
    s[j]!='\0'
    ,在终止的空字符处停止
  • 您忘记在
    if
    行的末尾添加
  • 您忘记从函数
    count\u digits
    返回结果
    digits
试试这个:

#include<stdio.h>

int count_digits(char s[]);

int main (){
    
    char x[1000];
    printf("input string (max 1000 character): ");
    scanf("%s", x); /* remove extra & */
    printf("number of digits in the text = %i", count_digits(x));
    return 0;
    
}
int count_digits(char s[]){
    int j, digits=0;
    
    for (j=0; s[j] !='\0'; j++)
    {
        if(s[j] >= '0' && s[j] <= '9') /* add ) */
        {
            digits++;
        }
    }
    
    return digits; /* return the result */
}
#包括
整数计数(字符s[]);
int main(){
char x[1000];
printf(“输入字符串(最多1000个字符):”;
scanf(“%s”,x);/*删除额外的&*/
printf(“文本中的位数=%i”,计数_位数(x));
返回0;
}
整数计数\u位数(字符s[]{
int j,数字=0;
对于(j=0;s[j]!='\0';j++)
{

如果(s[j]>='0'&&s[j]打开警告,则会报告缺少的return语句。首先,此代码没有递归性。您可以使用递归调用来计数(s+1)位来替换循环但正如Paul所说,你的函数需要返回一些东西,打开编译器警告会告诉你这一点。谢谢你,兄弟。但是你能解释一下为什么“\0”不应该是“0”@RiandraPutra
“\0”
是空字符,用作C字符串的终止符。
'0'
0是48,ASCII格式。字符串不需要包含
'0'
,因此使用它会增加读取超出范围或读取未初始化的不确定值的风险。
#include<stdio.h>

int count_digits(char s[]);

int main (){
    
    char x[1000];
    printf("input string (max 1000 character): ");
    scanf("%s", x); /* remove extra & */
    printf("number of digits in the text = %i", count_digits(x));
    return 0;
    
}
int count_digits(char s[]){
    int j, digits=0;
    
    for (j=0; s[j] !='\0'; j++)
    {
        if(s[j] >= '0' && s[j] <= '9') /* add ) */
        {
            digits++;
        }
    }
    
    return digits; /* return the result */
}