【问题标题】:collecting numbers and printing them收集数字并打印它们
【发布时间】:2009-06-09 08:02:00
【问题描述】:

我想要完成的是生成 100 个随机 0 和 1,将它们全部添加到一个变量中,然后打印出来。我现在拥有的东西我不知道如何工作。如果有人能解释我做错了什么,我将不胜感激。

randstring (void){
    int i;
    int num;
    char buffer[101];
    i=100;
    while(i>0, i--){
        num = rand()%2;
        strcpy(buffer, num);
    }
    return(buffer);
}

我现在拥有的是:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

main (void){
    printf("%f", randstring());
}
randstring (void){
    int num;
    char buffer[101];
    int i = 100;
    while(i-- >= 0) buffer[i] = rand() % 2;
    return(buffer);
}

【问题讨论】:

  • 正如@alamar 指出的那样,您需要字符 '0'(=48) 和 '1'(=49) 而不是 0 和 1
  • 我还建议:将 {} 添加到 while 中,因为从返回中删除 () 会更清楚,它不是函数。和!你不能返回缓冲区!您需要在 main 中静态分配它并传递,或者在 randstring 中动态分配它(使用 malloc)
  • chnage 缓冲区[i] = rand() % 2;到缓冲区 [i] = (rand() % 2) ? '1' : '0';
  • 我在下面更新了我的答案以使用动态长度。由于手边没有 C 编译器,所以没有编译!
  • 这就是为什么在 Windows 上编程被认为是有害的。除非您安装了 500M IDE,否则您没有任何方便的东西。他的其他问题是他没有前向声明 randstring(),并且他使用 prinf("%f") 来打印字符串。

标签: c random string-concatenation


【解决方案1】:

循环体中的buffer[i] = (rand() % 2) ? '1' : '0';怎么样?

我会做 buffer[100] = 0;

但更糟糕的问题是你不能返回缓冲区,因为一旦你的函数退出,它就会被覆盖。它在堆栈上分配,并且在函数退出时堆栈被重用。您需要执行 malloc 和 free,或者将缓冲区及其长度传递给此函数。

这给了我们:

#include <stdio.h>

#define RAND_LENGTH 100

char *randstring (char *buffer, int length);

int main (int a, char **b){
    char buffer[RAND_LENGTH + 1];
    printf("%s", randstring(buffer, RAND_LENGTH));
}

char *randstring (char *buffer, int length){
    int i = length;
    while(--i >= 0) {
        buffer[i] = (rand() % 2) ? '1' : '0';
    }
    buffer[length] = 0;
    return buffer;
}

【讨论】:

  • 哇,谢谢。正如你可以告诉我只是在这里学习所以感谢你解释一下,现在解码你所做的并学习:)。
【解决方案2】:

试试这个:

int i = 100;

while(i-- >= 0) buffer[i] = rand() % 2;

【讨论】:

  • 这不好:你用 0 和 1 填充字符缓冲区。它将无法打印。他可能想要的是“0”和“1”。
  • 这运行良好,但返回给了我 main.c:35 的错误:警告:返回从没有强制转换的指针中生成整数 main.c:35:警告:函数返回局部变量的地址全部完成
猜你喜欢
  • 2023-03-08
  • 2015-06-10
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 2019-08-25
  • 1970-01-01
  • 1970-01-01
  • 2019-03-25
相关资源
最近更新 更多