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(例如atoisscanf),然后在检查程序并在需要时找到正确的,您可以避免使用标准转换并编写自己的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函数,我无法转换输入的主要内容,如果未能解决你的问题,请参考以下文章

C/C++中字符串与数字相互转换

C语言将数字转换为字符型输出(用函数)

如何将特定字符从字符串转换为int(C)

C语言字符转数字

无法将字符串转换为 const char/string* 到 int*

c语言中实现输入一个数字字符,然后转换成整数数字输出.怎么做?