【问题标题】:Get the return value from a function从函数中获取返回值
【发布时间】:2016-04-20 18:52:12
【问题描述】:

我想通过一个函数修改一个字符并将其打印在屏幕上,但我的代码无法实现这个功能。这是我的源代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
long M = 2147483647;
void IntroduceError(char k[],double p)
{
    int i;

    for ( i = 0; i < 8; i++) {
        if ((double)random()/M <= p)
            k[i] = 1;
    }

}

int main(int argc, char *argv[])
{

    char test[] = "11110000";
    double rate = atof(argv[1]);
    IntroduceError(test, rate);
    printf("\nErrored codeword is : %s\n",test);

    return 0;
}

【问题讨论】:

  • 它甚至不会编译。
  • 什么是get?您对哪个命令行的预期输出是什么?
  • 您的意思是printf("\nErrored codeword is : %s\n",text); 而不是printf("\nErrored codeword is : %s\n",get);?还要注意argv[1] 是一个字符串,你的函数需要一个double,使用printf("\nErrored codeword is : %s\n",strtod(text, NULL));
  • 对不起,我弄错了。现在它可以编译但我不能修改字符测试。我想在随机数小于0.01时修改每一位测试
  • 2147483647 应替换为 RAND_MAXrandom 应替换为 randk[i]=1 应替换为 k[i]='1'。如果我进行这些更改并使用足够高的速率参数,您的程序就会按照您的预期进行。

标签: c char


【解决方案1】:

k 是一个字符串,即字符数组,但您为其分配了一个整数值。

代替:

k[i] = 1;

你可能想要:

k[i] = '1';

此外,您应该在程序开始时调用 srandom 来播种随机数生成器,至少传入 PID,即 srandom(getpid());,这样您就不会每次都得到相同的结果。

【讨论】:

    【解决方案2】:

    printf 语句中的get 未定义。如果您将get 更改为test,它应该可以编译。

    【讨论】:

    • 我认为这是因为您没有回答问题。
    • 在您修复我提到的代码之前,代码甚至无法编译,然后代码完全按照我所说的进行修复,并且得到负面评价。如果事情是这样运作的,这个网站就有问题。
    • 看起来我的负面评价是由一个甚至不知道正确变量名称“test”而不是“text”的人给出的
    猜你喜欢
    • 2016-01-07
    • 1970-01-01
    • 2018-04-09
    • 2014-05-28
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多