【问题标题】:Get to number from an array and assign to one int从数组中获取数字并分配给一个 int
【发布时间】:2012-05-17 17:11:55
【问题描述】:

我正在做作业并尝试从数组中获取两个数字字符,例如ABC10DEF

我想获取10 并将其存储在int 类型中。

            number_holder_1 = back[3] - '0';
            number_holder_2 = back[4] - '0';

            number = number_holder_1 * 10 + number_holder_2;

这不起作用我不知道为什么。

当我打印出number_holder_1 的值时,它会显示1,当我显示number_holder_2 时,它会显示0,但是当我打印number 时,它只会显示0

我不知道怎么做。

更新:

numbernumber_holder_1number_holder_2 定义为 int 类型。

包含ABC10DEF 的名为back 的数组正在从main 传递。

【问题讨论】:

  • number 被声明为int ?
  • @Radu 它只是不用于显示我正在尝试将其存储到 int 并在 for loop 中使用它
  • number_holder_1number_holder_2 也是ints 吗?如果是这样,我不明白为什么它会给number 提供错误的结果。
  • 您用来输出number 的打印语句的哪一行?请注意,如果您提供一个独立的示例,人们可以编译以重现您的问题,那么最容易提供帮助......那么我们就不必问所有这些猜测性的问题!阅读:sscce.org

标签: c logic


【解决方案1】:

这似乎是一个实现错误,因为使用您给出的内容,以及一些更好的变量名称,它确实有效。

#include <stdio.h>
#include <ctype.h>

int letter2int(char c) {
    int n;
    if (isdigit(c)) {
        n = c - '0';
    } else {
        n = -1; /* error */
    }

    /* for debugging */
    printf("For character '%c' we get number '%d'.\n", c, n);

    return n;
}

int main(int argc, char** argv) {
    const char str[] = "ABC10DEF";
    int tens, ones;
    int result;

    tens = letter2int(str[3]);
    ones = letter2int(str[4]);

    result = tens * 10 + ones;

    printf("Result: %d\n", result);

    return 0;
}

这可以概括为形成一个 atoi 函数(ASCII 到整数)或通过使用循环和指向索引的char 指针提取字符串中出现的第一个数字(由任何非数字字符终止)字符串str

使用i 作为从零开始的索引result += number * (int)pow(10, i);

【讨论】:

  • @myctylr,我不允许像新功能一样创建,但我会看看我能从你提供的东西中改变什么。
  • @Ali,我建议您通过比较两者来寻找自己代码中的错误。
  • 我保证我不会使用你的代码。我要先看看哪里是真正的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-06
  • 1970-01-01
  • 2016-07-15
  • 2013-08-11
  • 2013-12-09
相关资源
最近更新 更多