我是 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;
}
最佳答案
这两个函数都无效。
对于初学者来说,最好将参数 num
和 digit
设置为 unsigned int
类型。否则功能会更复杂。也就是说,您需要检查其中一个参数或两个参数是否为负数。
其次,函数 digitPos1
具有未定义的行为,因为如果数字中不存在该数字,它不会返回任何内容。
此外,您应该使用 do-while 循环而不是 while 循环,因为用户可以将 num
设置为 0
和 0
是一个有效的数字。
函数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/