随机化要在c中打印的字符串

时间:2019-02-04 02:26:41

标签: c random

我有一个快速的问题。是否可以“随机化”我得到的输出?例如,在第一次运行中,我得到了“魔术数字1”,而当我再次运行它时,我得到了“魔术数字3”。我在其他地方找不到任何帮助。

#include <stdio.h>

int main() {
char *a = "Magic number 1\n";
char *b = "Magic number 2\n";
char *c = "Magic number 3\n";

printf("%s", b);

    return 0;
}

我试图将代码编辑为

printf("%s", a||b);

但是||仅用于逻辑,对吧?

2 个答案:

答案 0 :(得分:1)

||根据逻辑OR语句的真值产生1或0的 int

语句printf("%s", a||b);中发生的事情是值1(由于要比较的字符串指针的地址非零,因此OR为true并返回1 )尝试作为指向以空字符结尾的字符串的指针进行访问。这是未定义的行为,很可能会崩溃(如果幸运的话)。

如果要从代码中的一组变量中打印随机字符串,则可以执行以下操作:

#include <stdlib.h>
#include <time.h>

 // (in main())
    srand((unsigned)time(NULL));  
    int r = rand()%3;
    if(r == 0)
        puts(a);
    else if(r == 1)
        puts(b);
    else
        puts(c);

答案 1 :(得分:1)

这样的事情呢? 您可以使用2D数组来代替为每个变量创建单独的变量。

  int main() {
      char arr[3][100] = {"Magic number 1\n", "Magic number 2\n", "Magic number 3\n"};
      int i, range=3;
      srand((unsigned)time(NULL));  
      i = rand()%range;
      puts(arr[i]);
      return 0;
    }