Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 实现一个反转函数来反转整数,但是这里的输出总是0_C_Integer - Fatal编程技术网

C 实现一个反转函数来反转整数,但是这里的输出总是0

C 实现一个反转函数来反转整数,但是这里的输出总是0,c,integer,C,Integer,我不明白为什么返回。。。。不起作用。不知何故,输出总是0。这里对atoi的返回调用总是输出0 #include <stdio.h> //INCLUDES #include <stdlib.h> int reverse (int x); //Func Decls int main () { printf ("%d", reverse (123)); //123=321, -123=-321, 120=21, 0=0 return 0; }

我不明白为什么返回。。。。不起作用。不知何故,输出总是0。这里对
atoi
的返回调用总是输出0

#include <stdio.h>  //INCLUDES
#include <stdlib.h>

int reverse (int x); //Func Decls

int
main ()
{
  printf ("%d", reverse (123)); //123=321, -123=-321, 120=21, 0=0
  return 0;
}

int
reverse (int x)
{

  int i, rem = 0;
  char arr[15];

  while (x % 10 != 0)
    {
      rem = x % 10;
      arr[i] = ((char)rem);
      x /= 10;
      i++;
    }

  return atoi(arr); //OUTPUT = 0, does not return actual output
} 
#include//INCLUDES
#包括
反向整数(整数x)//职能部门
int
主要()
{
printf(“%d”,反面(123));//123=321,-123=-321,120=21,0=0
返回0;
}
int
反向(整数x)
{
int i,rem=0;
char-arr[15];
而(x%10!=0)
{
rem=x%10;
arr[i]=((字符)rem);
x/=10;
i++;
}
return atoi(arr);//OUTPUT=0,不返回实际输出
} 

问题在于
atoi()
函数的使用。
atoi()
函数基本上将带有ASCII编码的数字字符的字符串转换为整数。 如果查看表格,数字1、2和3分别编码字符
“^A”
“^B”
“^C”
。这意味着,在
while
循环
reverse()
函数之后,作为参数传递给
atoi()
的字符串不是数字字符串,因此零作为错误返回。此外,字符
'1'
'2'
'3'
分别编码为数字49、50和51

现在,我建议您更改整个实现,因为接收整数作为操作的输入是没有意义的,在操作过程中,使用
atoi()
将其转换为字符串以再次返回整数。所以,忘记字符串,然后
atoi()
。 让我们开始创建一个循环,使用模块操作符对数字的每个数字进行操作,就像您所做的那样

int reverse (int x) {
    int result = 0;
    while ( x != 0 ) {
        result = x%10;
    }
    return result;
}
然后,要在
结果中插入另一个数字,请执行相反的操作:将其乘以10

int reverse (int x) {
    int result = 0;
    while ( x != 0 ) {
        result = result*10 + x%10;
    }
    return result;
}
现在,从
x
中剪下目标数字,将其除以10

int reverse (int x) {
    int result = 0;
    while ( x != 0 ) {
        result = result*10 + x%10;
        x /= 10;
    }
    return result;
}
最后,完整的代码

#include <stdio.h>
#include <stdlib.h>

int reverse (int x);

int main () {
    printf ("%d\n", reverse(123));
    printf ("%d\n", reverse(-123));
    printf ("%d\n", reverse(120));
    printf ("%d\n", reverse(0));
    return 0;
}

int reverse (int x) {
    int result = 0;
    while ( x != 0 ) {
        result = result*10 + x%10;
        x /= 10;
    }
    return result;
}

问题在于
atoi()
函数的使用。
atoi()
函数基本上将带有ASCII编码的数字字符的字符串转换为整数。 如果查看表格,数字1、2和3分别编码字符
“^A”
“^B”
“^C”
。这意味着,在
while
循环
reverse()
函数之后,作为参数传递给
atoi()
的字符串不是数字字符串,因此零作为错误返回。此外,字符
'1'
'2'
'3'
分别编码为数字49、50和51

现在,我建议您更改整个实现,因为接收整数作为操作的输入是没有意义的,在操作过程中,使用
atoi()
将其转换为字符串以再次返回整数。所以,忘记字符串,然后
atoi()
。 让我们开始创建一个循环,使用模块操作符对数字的每个数字进行操作,就像您所做的那样

int reverse (int x) {
    int result = 0;
    while ( x != 0 ) {
        result = x%10;
    }
    return result;
}
然后,要在
结果中插入另一个数字,请执行相反的操作:将其乘以10

int reverse (int x) {
    int result = 0;
    while ( x != 0 ) {
        result = result*10 + x%10;
    }
    return result;
}
现在,从
x
中剪下目标数字,将其除以10

int reverse (int x) {
    int result = 0;
    while ( x != 0 ) {
        result = result*10 + x%10;
        x /= 10;
    }
    return result;
}
最后,完整的代码

#include <stdio.h>
#include <stdlib.h>

int reverse (int x);

int main () {
    printf ("%d\n", reverse(123));
    printf ("%d\n", reverse(-123));
    printf ("%d\n", reverse(120));
    printf ("%d\n", reverse(0));
    return 0;
}

int reverse (int x) {
    int result = 0;
    while ( x != 0 ) {
        result = result*10 + x%10;
        x /= 10;
    }
    return result;
}

此任务不需要数组或
atoi
函数,且
while
循环的逻辑不正确。一个正确且简单的方法可以是这样的(前提是不发生整数溢出):

#包括
反向整数(整数x)
{
int r=0;
而(x!=0){
r=10*r+x%10;
x/=10;
}
返回r;
}
内部主(空)
{
printf(“%d\n”,反面为(1234));
返回0;
}

此任务不需要数组或
atoi
函数,而
while
循环的逻辑不正确。一个正确且简单的方法可以是这样的(前提是不发生整数溢出):

#包括
反向整数(整数x)
{
int r=0;
而(x!=0){
r=10*r+x%10;
x/=10;
}
返回r;
}
内部主(空)
{
printf(“%d\n”,反面为(1234));
返回0;
}

根据您的代码,您可以稍微修改代码以使其正常工作。以下是我的看法:

#include <stdio.h>  //INCLUDES
#include <stdlib.h>

int reverse (int x); //Func Decls

int main () {
  printf ("%d", reverse (123)); //123=321, -123=-321, 120=21, 0=0
  return 0;
}

int reverse (int x) {

  int i, rem = 0;
  int arr[15];

  while (x != 0)
    {
      rem = x % 10;
      arr[i] = rem;
      x /= 10;
      i++;
    }
    
  int result = 0;
  for (int j = 0; j < i; j++) {
    result = 10 * result + arr[j];
  }


  return result;
} 
#include//INCLUDES
#包括
反向整数(整数x)//职能部门
int main(){
printf(“%d”,反面(123));//123=321,-123=-321,120=21,0=0
返回0;
}
反向整数(整数x){
int i,rem=0;
int-arr[15];
而(x!=0)
{
rem=x%10;
arr[i]=rem;
x/=10;
i++;
}
int结果=0;
对于(int j=0;j
根据您的代码,您可以稍微修改代码以使其正常工作。以下是我的看法:

#include <stdio.h>  //INCLUDES
#include <stdlib.h>

int reverse (int x); //Func Decls

int main () {
  printf ("%d", reverse (123)); //123=321, -123=-321, 120=21, 0=0
  return 0;
}

int reverse (int x) {

  int i, rem = 0;
  int arr[15];

  while (x != 0)
    {
      rem = x % 10;
      arr[i] = rem;
      x /= 10;
      i++;
    }
    
  int result = 0;
  for (int j = 0; j < i; j++) {
    result = 10 * result + arr[j];
  }


  return result;
} 
#include//INCLUDES
#包括
反向整数(整数x)//职能部门
int main(){
printf(“%d”,反面(123));//123=321,-123=-321,120=21,0=0
返回0;
}
反向整数(整数x){
int i,rem=0;
int-arr[15];
而(x!=0)
{
rem=x%10;
arr[i]=rem;
x/=10;
i++;
}
int结果=0;
对于(int j=0;j
关于:

int i, rem = 0;

中的局部变量
i
未初始化!。在我的系统上,结果是seg故障事件。

关于:

int i, rem = 0;


中的局部变量
i
未初始化!。在我的系统上,结果是seg故障事件。

数字的字符表示与其数值不同。通常,您可以执行“
0”+rem
来获取数字的字符表示形式。
char arr[15]=”
0
填充。然后
而(x){…}
arr[i]=rem+'0'数字的字符表示形式与其数值不同。通常,您可以执行“
0”+rem
来获取数字的字符表示形式。
char arr[15]=”
0
填充。然后
而(x){…}