代码之家  ›  专栏  ›  技术社区  ›  vibeon7

C程序调用字符串到int函数,我无法转换输入

  •  1
  • vibeon7  · 技术社区  · 9 年前

    int 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;
    }
    
    2 回复  |  直到 9 年前
        1
  •  1
  •   VolAnd    9 年前

    我想您的代码无法编译,因为有一些错误。

    第一个在队列中

     int str_to_int(inputbase)
    

    哪里 inputbase

    如果更改为

     int str_to_int(char * inputbase)
    

    下一个需要改进的地方是

     num1[50] = inputbase;
    

    1. num1[50] 意味着访问第51项,但只有50项索引从0到49
    2. 陈述 num1[0] = inputbase; (以及任何其他正确的索引)是错误的,因为类型不同: num1[0] 是 char 但是 输入基 is指针
    3. num1 = inputbase; = 不能在C中使用,因此请考虑生成循环或使用标准库函数 strncpy

    由于这只是问题的开始,我建议从十进制输入开始,使用一些标准函数进行转换 char* 字符串到 int (例如。 atoi sscanf ),然后在检查程序并发现其正确后(如果需要),可以避免使用标准转换并编写自己的程序 str_to_int

        2
  •  0
  •   chqrlie    9 年前

    功能的原型 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);
    }