如何在C中将字符串转换为完整的整数?

如何在C中将字符串转换为完整的整数?,c,C,我试过这样做: //Write a program to find out the reverse order of a given integer #include <stdio.h> int main(void){ //Put variables for the further proceed int number, quotient=1, remainder; //Declare a character array char text[]="princeX&quo

我试过这样做:

//Write a program to find out the reverse order of a given integer
#include <stdio.h>
int
main(void){

//Put variables for the further proceed
int number, quotient=1, remainder;

//Declare a character array
char text[]="princeX";

//Show the message to the user
printf("Enter an integer number :");

//Taking input from the user
scanf("%d",&number);

//To find out the integer number in the reverse order
  while(quotient!=0){
  quotient=number/10;
  remainder=number%10;
  number=quotient;
  text[6] = remainder + '0';
  puts(text);
  }
//Converts the string to a whole integer
int numberUpdate=atoi(text);
printf("%d",numberUpdate);


}
但我的期望是:

 6
 5
 4
 3
 2
 1

在那之后,我只想把它们打印成一个整数。但我不能那样做。当我要将这些字符转换为整数,但输出显示为零时。我在程序中遇到了哪个问题?我如何解决这个难题?

问题从这行开始
text[6]=余数+0';
放置(文本)
您只更改了
文本[6]
,其中包含“X”,然后打印整个
文本。这就解释了你为什么选择

原则6
原则5
原则4
原则3
王子2
原则1

如果要获得正确的输出,应进行以下更改:

  • 在while循环之前声明另一个变量
    i=0
  • text[i]=余数+0'替换有问题的行;printf(“%c\n”,文本[i]);i++
  • 这样做是因为您希望替换
    文本中的所有元素。那么您应该期望得到正确的输出。这些行
    int numberUpdate=atoi(文本);
    printf(“%d”,数字更新)将在以后工作。它一开始不起作用,只是因为它无法将包含字母的字符串转换为数字。因为您的字符串现在只包含数字,所以一切都应该如预期的那样正常工作。
    
    我希望这对你有帮助,我尽了最大努力解释了这个问题,希望你能通过阅读理解。:)

    问题是从这一行开始的
    text[6]=余数+0';
    放置(文本)
    您只更改了
    文本[6]
    ,其中包含“X”,然后打印整个
    文本。这就解释了你为什么选择
    
    原则6
    原则5
    原则4
    原则3
    王子2
    原则1

    如果要获得正确的输出,应进行以下更改:

  • 在while循环之前声明另一个变量
    i=0
  • text[i]=余数+0'替换有问题的行;printf(“%c\n”,文本[i]);i++
  • 这样做是因为您希望替换
    文本中的所有元素。那么您应该期望得到正确的输出。这些行
    int numberUpdate=atoi(文本);
    printf(“%d”,数字更新)将在以后工作。它一开始不起作用,只是因为它无法将包含字母的字符串转换为数字。因为您的字符串现在只包含数字,所以一切都应该如预期的那样正常工作。
    
    我希望这对你有帮助,我尽了最大努力解释了这个问题,希望你能通过阅读理解。:)

    这里有数字到字符串的转换函数

    char *reverse(char *str)
    {
        char *wrk = str, *end;
        if(str)
        {
            end = str + strlen(str) -1;
            while(end > str)
            {
                char tmp = *wrk;
                *wrk++ = *end;
                *end-- = tmp;
            }
        }
        return str;
    }
    
    char digits[] = "01234567890abcdefghijklmnopqrstxyvwz";
    
    char *convert(char *buff, unsigned long long val, int radix)
    {
        char *tmp = buff;
    
        if(radix > sizeof(digits) - 1 || radix < 2) return NULL;
    
        while(val)
        {
            *tmp++ = digits[val % radix];
            val /= radix;
        }
        *tmp = 0;
        return reverse(buff);
    }
    
    int main(void)
    {
        char str[30];
    
        printf("decimal: %s\n", convert(str, 345676, 10));
        printf("binary: %s\n", convert(str, 345676, 2));
        printf("octal: %s\n", convert(str, 345676, 8));
        printf("hex: %s\n", convert(str, 345676, 16));
        printf("Base 5: %s\n", convert(str, 345676, 5));
        printf("Base 29: %s\n", convert(str, 345676, 29));
    
    }
    
    char*reverse(char*str)
    {
    char*wrk=str,*end;
    如果(str)
    {
    end=str+strlen(str)-1;
    while(end>str)
    {
    字符tmp=*wrk;
    *wrk++=*结束;
    *结束--=tmp;
    }
    }
    返回str;
    }
    字符数字[]=“01234567890abcdefghijklmnopqrstxyvwz”;
    char*convert(char*buff,无符号长val,整数基数)
    {
    char*tmp=buff;
    如果(基数>数字大小)-1 | |基数<2)返回NULL;
    while(val)
    {
    *tmp++=数字[val%基数];
    val/=基数;
    }
    *tmp=0;
    返回反向(buff);
    }
    内部主(空)
    {
    char-str[30];
    printf(“十进制:%s\n”,convert(str,345676,10));
    printf(“二进制文件:%s\n”,convert(str,345676,2));
    printf(“八进制:%s\n”,convert(str,345676,8));
    printf(“十六进制:%s\n”,convert(str,345676,16));
    printf(“基5:%s\n”,convert(str,345676,5));
    printf(“基29:%s\n”,convert(str,345676,29));
    }
    

    这里有数字到字符串的转换功能

    char *reverse(char *str)
    {
        char *wrk = str, *end;
        if(str)
        {
            end = str + strlen(str) -1;
            while(end > str)
            {
                char tmp = *wrk;
                *wrk++ = *end;
                *end-- = tmp;
            }
        }
        return str;
    }
    
    char digits[] = "01234567890abcdefghijklmnopqrstxyvwz";
    
    char *convert(char *buff, unsigned long long val, int radix)
    {
        char *tmp = buff;
    
        if(radix > sizeof(digits) - 1 || radix < 2) return NULL;
    
        while(val)
        {
            *tmp++ = digits[val % radix];
            val /= radix;
        }
        *tmp = 0;
        return reverse(buff);
    }
    
    int main(void)
    {
        char str[30];
    
        printf("decimal: %s\n", convert(str, 345676, 10));
        printf("binary: %s\n", convert(str, 345676, 2));
        printf("octal: %s\n", convert(str, 345676, 8));
        printf("hex: %s\n", convert(str, 345676, 16));
        printf("Base 5: %s\n", convert(str, 345676, 5));
        printf("Base 29: %s\n", convert(str, 345676, 29));
    
    }
    
    char*reverse(char*str)
    {
    char*wrk=str,*end;
    如果(str)
    {
    end=str+strlen(str)-1;
    while(end>str)
    {
    字符tmp=*wrk;
    *wrk++=*结束;
    *结束--=tmp;
    }
    }
    返回str;
    }
    字符数字[]=“01234567890abcdefghijklmnopqrstxyvwz”;
    char*convert(char*buff,无符号长val,整数基数)
    {
    char*tmp=buff;
    如果(基数>数字大小)-1 | |基数<2)返回NULL;
    while(val)
    {
    *tmp++=数字[val%基数];
    val/=基数;
    }
    *tmp=0;
    返回反向(buff);
    }
    内部主(空)
    {
    char-str[30];
    printf(“十进制:%s\n”,convert(str,345676,10));
    printf(“二进制文件:%s\n”,convert(str,345676,2));
    printf(“八进制:%s\n”,convert(str,345676,8));
    printf(“十六进制:%s\n”,convert(str,345676,16));
    printf(“基5:%s\n”,convert(str,345676,5));
    printf(“基29:%s\n”,convert(str,345676,29));
    }
    

    只需打印
    余数+'0'
    而不是整个字符串
    “princeX”
    atoi(“princeX”)
    返回
    0
    ,因为
    “princeX”
    不是有效的数字表示您总是设置最后一个字符,
    text[6]=余数+'0'只需打印余数+0,而不是整个字符串“princeX”。主席先生,我不明白这个说法。你能解释一下吗?现在你可以看到更新@tomkarzesjs只打印
    余数+0'
    而不是整个字符串
    “princeX”
    atoi(“princeX”)
    返回
    0
    ,因为
    “princeX”
    不是有效的数字表示。你总是在设置最后一个字符
    text[6]=余数+0只需打印余数+0,而不是整个字符串“princeX”。主席先生,我不明白这个说法。你能解释一下吗?现在你可以看到更新@TomKarzesThank谢谢你的帮助。你的回答帮助了我,我的问题已经解决了。谢谢你的帮助。你的回答帮助了我,我的问题已经解决了。这对我来说很难理解。请提供一些你在代码中所做的解释。这对我来说很难理解。请解释一下你在代码中做了什么。