Рандомизировать строку для печати в c - PullRequest
0 голосов
/ 04 февраля 2019

У меня быстрый вопрос.Можно ли «рандомизировать» вывод, который я получаю?Например, при первом запуске я получаю «Магическое число 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 голосов
/ 04 февраля 2019

Как насчет этого?Вместо того, чтобы создавать отдельные переменные для каждой из них, вы можете использовать 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;
    }
0 голосов
/ 04 февраля 2019

|| создает int либо 1, либо 0 на основе истинности логического оператора ИЛИ.

То, что происходит в операторе 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);
...