C程序调用字符串到int函数,我无法转换输入
Posted
技术标签:
【中文标题】C程序调用字符串到int函数,我无法转换输入【英文标题】:C program calling a string to int function, I am unable to convert the input 【发布时间】:2017-12-13 10:38:51 【问题描述】:我想将字符串转换为int
并从main
调用函数。其中第一个字符是声明数字基数的字母,字符串中的其余字符是数字。我可以让函数单独工作,但是当使用main
函数调用它时,它不会打印出正确的值。
使用二进制的用户输入示例:
b1000
b1010
结果应该是:
b
b
1000
1010
代码如下:
#include <stdio.h>
#include <string.h>
#include <math.h>
int str_to_int(inputbase)
char num1[50];
num1[50] = inputbase;
char numcpy1[sizeof(num1) - 1];
int i, len1;
int result1 = 0;
//printf("String: ");
//gets(num1);
//Access first character for base
printf("%c \n", num1[0]);
//Remove first character for number1 and number 2
if (strlen(num1) > 0)
strcpy(numcpy1, &(num1[1]));
else
strcpy(numcpy1, num1);
len1 = strlen(numcpy1);
//Turn remaining string characters into an int
for (i = 0; i < len1; i++)
result1 = result1 * 10 + ( numcpy1[i] - '0' );
printf("%d \n", result1);
return result1;
int main()
char *number1[50], *number2[50];
int one, two;
printf("\nAsk numbers: \n");
gets(number1);
gets(number2);
one = str_to_int(number1);
two = str_to_int(number2);
printf("\nVerifying...\n");
printf("%d\n", one);
printf("%d\n", two);
return 0;
【问题讨论】:
int str_to_int(inputbase)
在你的机器上编译吗?你用的是什么编译器?
这对我来说很像一个家庭作业问题。
我正在使用 gcc 编译器。函数 int str_to_int(inputbase) 确实编译
【参考方案1】:
我想你的代码因为一些错误而无法编译。
第一个在行
int str_to_int(inputbase)
inputbase
的定义没有类型。
如果改为
int str_to_int(char * inputbase)
下一个改进点是在行
num1[50] = inputbase;
这样的分配有一系列错误:
num1[50]
表示访问第 51 项,但从 0 到 49 索引的只有 50 项
语句 num1[0] = inputbase;
(以及任何其他正确的索引)由于类型不同而出错:num1[0]
是 char
,但 inputbase
是指针
num1 = inputbase;
也会出错(因为复制字符串=
不能在C中使用,所以考虑做循环或者使用标准库函数strncpy
)
由于这只是问题的开始,我建议从十进制输入开始使用一些标准函数将char*
字符串转换为int
(例如atoi
或sscanf
),然后在检查程序并在需要时找到正确的,您可以避免使用标准转换并编写自己的str_to_int
【讨论】:
不提倡使用strncpy()
,它永远不是正确的工具,尤其是对于初学者。也不鼓励使用gets()
。【参考方案2】:
您的函数str_to_int()
的原型应指定intputbase
的类型。你传递的是一个字符串,str_to_int
没有理由修改这个字符串,所以类型应该是const char *inputbase
。
此外,您不需要字符串的本地副本,只需访问第一个字符以确定基数并相应地解析剩余的数字:
#include <stdlib.h>
int str_to_int(const char *inputbase)
const char *p = inputbase;
int base = 10; // default to decimal
if (*p == 'b') // binary
p++;
base = 2;
else
if (*p == 'o') // octal
p++;
base = 8;
else
if (*p == 'h') // hexadecimal
p++;
base = 16;
return strtol(p, NULL, base);
【讨论】:
以上是关于C程序调用字符串到int函数,我无法转换输入的主要内容,如果未能解决你的问题,请参考以下文章