c - 用指针返回一个值(C 程序)

标签 c algorithm function while-loop do-while

我是 C 语言的初学者,下面是一个查找给定数字位置的程序。我的第一个函数有效,但我不能对从指针返回值的第二个函数(digitPos2)说同样的话。我不确定出了什么问题以及为什么。

#include <stdio.h>
int digitPos1(int num, int digit);
void digitPos2(int num, int digit, int *result);
int main()
{
 int number, digit, result=0;
 printf("Enter the number: \n");
 scanf("%d", &number);
 printf("Enter the digit: \n");
 scanf("%d", &digit);
 printf("digitPos1(): %d\n", digitPos1(number, digit));
 digitPos2(number, digit, &result);
 printf("digitPos2(): %d\n", result);
 main();//return 0;
}
int digitPos1(int num, int digit)
{
    int pos=0;
    while(num)
    {
        if(num%10 == digit)
        {
            return pos = pos + 1;
        }
        else
        {
            pos++;
            num = num/10;
        }
    }
}
void digitPos2(int num, int digit, int *result)
{
    int pos=0;
    while(num)
    {
        if(num%10 == digit)
        {
            pos = pos + 1;
            *result = pos;
        }
        else
        {
            pos++;
            num = num/10;
        }
    }
    *result = 0;
}

Output

最佳答案

这两个函数都无效。

对于初学者来说,最好将参数 numdigit 设置为 unsigned int 类型。否则功能会更复杂。也就是说,您需要检查其中一个参数或两个参数是否为负数。

其次,函数 digitPos1 具有未定义的行为,因为如果数字中不存在该数字,它不会返回任何内容。

此外,您应该使用 do-while 循环而不是 while 循环,因为用户可以将 num 设置为 00是一个有效的数字。

函数digitPos2中的这条语句

*result = 0;

没有意义。

如果找到数字,则必须执行该函数

while(num)
{
    if(num%10 == digit)
    {
        pos = pos + 1;
        *result = pos;
        // exit the function
    }
    //...

此外,还不清楚用户如何确定该数字是否不存在于号码中。

如果数字中不存在该数字,您可以使用返回例如 -1 的方法。

注意,根据C标准,不带参数的函数main应声明为

int main( void )        

这是一个演示程序

#include <stdio.h>

int digitPos1( unsigned int num, unsigned int digit);
void digitPos2( unsigned int num, unsigned int digit, int *result);

int main( void )
{
    unsigned int number, digit;
    int result;

    printf( "Enter the number: " );
    scanf( "%d", &number );

    printf( "Enter the digit: " );
    scanf( "%d", &digit );

    printf("digitPos1(): %d\n", digitPos1( number, digit ) );

    digitPos2(number, digit, &result);
    printf( "digitPos2(): %d\n", result );

    return 0;
}

int digitPos1( unsigned int num, unsigned int digit )
{
    const unsigned int Base = 10;
    int pos = -1;
    int n = 0;

    do
    {
        if ( num % Base == digit )
        {
            pos = n;        
        }
        else
        {
            ++n;
        }

    } while ( ( num /= Base ) && ( pos == -1 ) );

    return pos;
}

void digitPos2( unsigned int num, unsigned int digit, int *result )
{
    const unsigned int Base = 10;
    int n = 0;

    *result = -1;
    do
    {
        if ( num % Base == digit )
        {
            *result = n;        
        }
        else
        {
            ++n;
        }

    } while ( ( num /= Base ) && ( *result == -1 ) );
}

程序输出可能类似于

Enter the number: 123456
Enter the digit: 2
digitPos1(): 4
digitPos2(): 4

位置从0开始。

关于c - 用指针返回一个值(C 程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49278308/

相关文章:

c++ - xutility 文件?

algorithm - 使用 Big-O 识别并说明运行时间

javascript - 这在 JavaScript 函数中指的是什么?

java - 如何随机选择一个类的实例并执行它的方法?

php - 通过 PHP 启动 C 程序时出现段错误

c - 取消引用 void**-casted type** 会打破严格的别名吗?

algorithm - 以 n 为底数相加

c - 在 C 中将数组作为参数传递

c - C中的面向对象编程

c - 评估整数是否为 POT(二的幂)