【问题标题】:can't return negative values不能返回负值
【发布时间】:2021-10-15 09:26:52
【问题描述】:

我正在做我老师给我的 C 作业,在带有 GCC 的 ubuntu 环境中使用它。 我们必须从“math.h”头文件中重新创建一种“圆形”,但不使用任何函数或头文件,也不通过检查这个函数的工作。我创建了一个代码,允许我为正值做这件事,它工作得很好。我对负值使用了相同的逻辑,但是当我要求我的 main 返回一个负值时,它总是返回一个“251”,这不是我要求的值。这是我的代码:

my_round.c

int my_round(float n)
{
    if (n<0)
    {
        float res = n-0.5;
        return res;
    }
    else
    {
        float res = n+0.5;
        return res;
    }
}

ma​​in_round.c

int my_round(float n);

int main(void)
{
    return my_round(-5.2);
}

然后我以这种方式使用 gcc:

gcc main_round.c my_round.c -o round.out

然后我执行 ./round.out,当“251”我要求“echo $?”时返回我。 但它确实适用于正值,我测试了所有值(如 1.1;1.2;等......一直到 1.9)。 如果有人愿意帮助我,我真的很感激,谢谢! 水泡

【问题讨论】:

  • 在 C 和 C++ 中是一样的。问题不在于语言,而在于操作系统允许的退出值。
  • 我认为您对老师的指示过于字面意思了。从程序中返回这个作为退出代码是疯狂的..
  • 如果你只把函数提供给你的老师,那你为什么认为老师不会用一个简单打印结果的main函数来测试呢?
  • 我同意@interjay“你的功能”很可能不应该是main

标签: c ubuntu


【解决方案1】:

您的问题是关于返回码 返回码在 0 到 255 之间无符号

打印值为-5 返回值为251 所以你的代码很好,但你测试它的方式不好

此代码正在显示:

-5
251
#include <stdio.h>
#include <stdlib.h>

static int my_round(float n)
{
    if (n<0)
    {
        float res = n-0.5;
        return res;
    }
    else
    {
        float res = n+0.5;
        return res;
    }
}

int main(void)
{
    int res = my_round(-5.2);
    printf("%d\n", res);
    printf("%u\n", ((unsigned int)res)&0Xff);
    return res;
}

【讨论】:

  • 好吧,我猜你指出了一个有趣的想法,但我不得不在这里原谅自己,我省略了一个细节。我们被要求不使用任何函数或标头...所以 stdio.h 和 stdlib.h 不能出现在我们的代码中,否则对于我们的老师来说它会出现错误...而且我们不会是给予的人我们的老师“main.c”部分,我们只能用它来测试我们的价值观。他将代表他创建它,只需一个命令:return my_round(value);
  • @Bloster 您应该区分两件事:1)在没有任何标准头文件和库函数的情况下实现该函数。 2)测试野兽。虽然您的限制对 1) 有效,但对 2) 没有多大意义。对于测试,您通常可以向目标投掷任何东西以使其失败。这意味着:my_round.c 中没有标题,但 main_round.c 没有限制。
  • @Gerhardh 确实我可以在我的 main_round.c 中添加这两个库,但这不会影响我的问题,因为我的老师是创建这个 main_round.c 部分的人,他说他想要它返回,而不是 printf,也不是 put 或其他任何东西,所以首先感谢您的澄清,但这不是答案,因为他只会把我放在 main_round.c 中的东西作为一种方式测试我们的程序 T-T
  • 好的,我添加另一个 printf 来向您展示代码是好的。您应该实施什么测试?测试部分不清楚
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-07
  • 2010-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-30
相关资源
最近更新 更多