COMO POSSO SORTEAR UMA POSIÇÃO DE UM VETOR E IMPRIMIR AS INFORMAÇÕES QUE ESTÃO NESSA POSIÇÃO?
02/07/2019
0
Bom, estou a um tempo estudando C/C++, e hoje me apareceu essa questão que não consigo resolver. Basicamente fiz uma struct para cadastrar o nome e o naipe das cartas em vetor de 20 posiçoes, e agora quero que o programa sorteie 3 posições desse vetor e imprima, mas tudo que imprime na tela é uns caracteres tipo(@ e G).
for(i=1 ; i <= 3 ; i++){ srand(time(NULL)); i = rand()%10; printf("%c\\n", vermelhas[i]);
Gabriel Smaniotto
Curtir tópico
+ 0
Responder
Posts
04/07/2019
João Júnior
Bom, estou a um tempo estudando C/C++, e hoje me apareceu essa questão que não consigo resolver. Basicamente fiz uma struct para cadastrar o nome e o naipe das cartas em vetor de 20 posiçoes, e agora quero que o programa sorteie 3 posições desse vetor e imprima, mas tudo que imprime na tela é uns caracteres tipo(@ e G).
for(i=1 ; i <= 3 ; i++){ srand(time(NULL)); i = rand()%10; printf("%c\\\\n", vermelhas[i]);
Há um problema em atribuir ao contador (i) do laço (for) o valor pseudoaleatório: se rand() % 10 gerar 4, por exemplo, o laço é terminado na primeira iteração. O certo é criar uma variável para receber o valor pseudoaleatório e aplicá-lo como índice do vetor. Um exemplo grosseiro:
#include<stdio.h> #include<stdlib.h> #include<math.h> #include<time.h> int main(){ int i = 0; int flag = 0; char cartas[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'}; srand(time(NULL)); for(i = 0; i < 3; i++){ flag = rand() % 10; printf(" %c\\n", cartas[flag]); } printf("\\n"); system("pause"); return 0; }
Além disso, a semeadura (srand(time(NULL)) é melhor ficar fora do for para haja uma mesma semente que a cada chamada do rand produza um número diferente. Evidentemente, há repetições de pseudocódigos, caso esse que deve ser devidamente tratado.
Responder
04/07/2019
João Júnior
Bom, estou a um tempo estudando C/C++, e hoje me apareceu essa questão que não consigo resolver. Basicamente fiz uma struct para cadastrar o nome e o naipe das cartas em vetor de 20 posiçoes, e agora quero que o programa sorteie 3 posições desse vetor e imprima, mas tudo que imprime na tela é uns caracteres tipo(@ e G).
for(i=1 ; i <= 3 ; i++){ srand(time(NULL)); i = rand()%10; printf("%c\\\\\\\\n", vermelhas[i]);
Há um problema em atribuir ao contador (i) do laço (for) o valor pseudoaleatório: se rand() % 10 gerar 4, por exemplo, o laço é terminado na primeira iteração. O certo é criar uma variável para receber o valor pseudoaleatório e aplicá-lo como índice do vetor. Um exemplo grosseiro:
#include<stdio.h> #include<stdlib.h> #include<math.h> #include<time.h> int main(){ int i = 0; int flag = 0; char cartas[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'}; srand(time(NULL)); for(i = 0; i < 3; i++){ flag = rand() % 10; printf(" %c\\\\n", cartas[flag]); } printf("\\\\n"); system("pause"); return 0; }
Além disso, a semeadura (srand(time(NULL)) é melhor ficar fora do for para haja uma mesma semente que a cada chamada do rand produza um número diferente. Evidentemente, há repetições de números pseudoaleatórios, caso esse que deve ser devidamente tratado.
Responder
Clique aqui para fazer login e interagir na Comunidade :)