如何在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谢谢你的帮助。你的回答帮助了我,我的问题已经解决了。谢谢你的帮助。你的回答帮助了我,我的问题已经解决了。这对我来说很难理解。请提供一些你在代码中所做的解释。这对我来说很难理解。请解释一下你在代码中做了什么。