Lilyanaa Ответов: 2

Сгенерируйте случайную строку в C


Привет, в этом коде я генерирую случайное число в определенном диапазоне, но я хочу, чтобы выход из массива должен быть
l101
l101
l102
l104

Я имею в виду добавление слова "хост" к каждому номеру, который генерируется случайным образом, как это можно сделать, пожалуйста??
Извините за мой плохой английский

Что я уже пробовал:

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


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

      char buffer[16];
      srand(time(NULL));
      int n = rand() % (8 + 1 - 4) + 4 ;
      for(int i=0;i<n;i++){
         
         int r = rand() % (104 + 1 - 101) + 101 ;

          sprintf( buffer, "host%d", r );
          printf( "No. of random selected node = %s\n", buffer[i]);
      }
  }

jeron1

printf( "No. of random selected node = host%d\n", a[i]); // <== add the word 'host' here 

Lilyanaa

Нет, я хочу, чтобы массив должен был иметь "host101"...

jeron1

Вам нужен массив строк?

Lilyanaa

да, но как можно исправить это слово "хост" и заставить число генерироваться случайным образом??

2 Ответов

Рейтинг:
5

Rick York

Предполагая, что у вас есть сгенерированный случайный номер комнаты, вы можете сделать строку такой :

char buffer[16];
sprintf( buffer, "host%d", roomNumber );

Чтобы сгенерировать случайный номер комнаты я бы использовал это :
int GetRandomValue( int minval, int maxval )
{
   int span = maxval - minval;
   int rval = rand() % span;
   int result = rval + minval;
   return result;
}

Если вы хотите, чтобы номера находились в диапазоне от 101 до 110, то передайте эти два значения функции :
int room = GetRandomValue( 101, 110 );


Lilyanaa

Вы можете посмотреть мое обновление, пожалуйста ?

Rick York

Ты уже близко. Чтобы отобразить буфер в виде строки, вам нужно передать его в printf. Как бы то ни было, вы передали ему один символ в массиве - buffer[1]. Так и должно быть :

  printf( "No. of random selected node = %s\n", buffer );


Если вы хотите, вы можете сгенерировать кучу чисел и сохранить их все в массиве целых чисел, а затем распечатать их все позже, используя тот же формат и оператор printf. Это зависит от вас.

Lilyanaa

О да большое спасибо

Rick York

Почему вы не поняли ответа?

Lilyanaa

О ,я так сожалею о непреднамеренной ошибке

Рейтинг:
1

OriginalGriff

Цитата:
Нет, я хочу, чтобы массив должен был иметь "host101"...

Ваш массив не может содержать такие значения, как "host101" - он может содержать только целые числа.
Чтобы заставить его содержать строки, вам нужно изменить его на массив, содержащий указатели char:
char* a[50];
А потом использовать функция malloc[^] чтобы выделить место для каждой строки внутри вашего цикла:
char *str;
...
str = (char *) malloc(10);
Затем вы можете использовать sprintf[^] чтобы напечатать ваш "хост" и номер в каждой строке, а затем поместить его в свой массив.


Lilyanaa

Вы можете посмотреть мое обновление, пожалуйста ?

OriginalGriff

И что же?