【问题标题】:Error printing correct number in C [duplicate]在 C 中打印正确数字时出错 [重复]
【发布时间】:2016-05-10 15:26:39
【问题描述】:

您好,我是 C 新手,我在使用“阶乘 8”运行程序时尝试打印 8。我得到的是 56,而不是 8。谁能解释为什么?

#include <stdio.h>

int main(int argc, char **argv)
{
    int input;

    if(argv[1] == NULL)
    {
        printf("Error: please supply an integer on the command line.\n");
        return 0;
    }

    input = *argv[1];
    printf("%d", input);

    return 0;
}

【问题讨论】:

  • argv[1] 是一个指向字符的指针。将 argv[1] 分配给 i 时,需要使用函数 atoi 将其转换为整数。如果您注意到 56 是 '8' 的 ascii 代码。

标签: c


【解决方案1】:

你得到一个 58 是因为你分配了任何 argv[1] 碰巧指向的整数值。你可能想看看atoi()

 input = atoi(argv[1]);

我真的建议您通过检查 argc 中的参数数量来验证您是否有参数,而不是仅仅取消引用 argv[1] 并检查它是否为空。

【讨论】:

  • “无论 argv[1] 碰巧指向”恰好是 字符 '8'
  • 是的。或者随便输入什么。或者如果没有参数,则未定义。
【解决方案2】:

这里:

input = *argv[1];

您正在尝试将 string(argv[1]) 分配给 int。

你应该这样:

input = atoi(argv[1]);

【讨论】:

    【解决方案3】:

    主函数中的参数作为字符串传递。所以当你这样做时

    input = *argv[1];
    

    您正在为输入分配字符串值。如果您查看 ascii 表,您可以看到字符“8”的值为 56。

    您可以使用 atoi() 函数作为其他答案强调,或者您可以使用 strtol() 将字符串转换为整数。

    有关 atoi() 和 strtol() 的更详细答案,请查看答案https://stackoverflow.com/a/3421555/1589566

    【讨论】:

      猜你喜欢
      • 2014-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-30
      • 1970-01-01
      相关资源
      最近更新 更多