Jump to content
AprendendoC

Ajuda laço for

Recommended Posts

AprendendoC

 printf(" Digite o Tamanho de sua Senha: ");
                    scanf("%d", &tamanho);
                    printf(" Senha Gerada: ");
                    for( int i = 0; i < tamanho; i++ ){
                         num = rand() % 10;
                         letras = rand() % 26+97;
                         printf("% d", num);
                         printf("% c", letras);
                         }

e o seguinte pessoal... nesse trecho de codigo acima o meu laço for tah repetindo n vezes que o usuario digitar...

so que na saida ele tah gerando o dobro do numero digitado pelo usuario...

e eu quero q ele gera somente o n vezes q o usuario digito..

Share this post


Link to post
Share on other sites
petvetbr

Isto está ocorrendo pois existem 2 printf a cada iteração. Teria que mudar a lógica para que somente 1 deles for executado a cada iteração.


Fernando Lage Bastos - MCP/MCTS/MCPD

Share this post


Link to post
Share on other sites
AprendendoC

ai que tah o problema... como e q faço isso?? já tentei de tudo.... tentei com ifs.. tentei usar while.. tentei 2 for... e nada..

Share this post


Link to post
Share on other sites
pmg

Se o n do utilizador for 4, qual é (um exemplo de) o output esperado?

Se o n do utilizador for 5, qual é (um exemplo de) o output esperado?

Sugestão: consoante a resposta, podes talvez fazer o for para metade de n e, se necessário, acertar o output no final do ciclo.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
brunoais

O que é que é o num e o que é que é letras?

Hum... Que tal usar um if e um rand() ?

Assumindo que rand devolve entre 0 e 1, se for < 0.5, é uma letra, senão é um numero.

De qq modo uma maneira melhore é gerar letras e numeros do ACIII partindo só de um numero e depois escrever o carater a q corresponde. O carater "1" existe, o carater "A" existe, etc.. :D

@pmg N sei se ter sempre letra e numero alternadamente é o que ele quer.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
AprendendoC

O que é que é o num e o que é que é letras?

Hum... Que tal usar um if e um rand() ?

Assumindo que rand devolve entre 0 e 1, se for < 0.5, é uma letra, senão é um numero.

De qq modo uma maneira melhore é gerar letras e numeros do ACIII partindo só de um numero e depois escrever o carater a q corresponde. O carater "1" existe, o carater "A" existe, etc.. :(

@pmg N sei se ter sempre letra e numero alternadamente é o que ele quer.

implementei o if com o rand() e funciono do jeito que eu queria...

a saida ficou: Senha Gerada = 814i5

eu tinha tentado implementa esse jeito antes.. so que com o switch..

nem tinha m passado pela cabeça o usar o if dessa maneira...

Valeu Pessoal... muito grato pela Ajuda...  :D

case 3:
                    printf(" Digite o tamanho de sua senha: ");
                    scanf("%d", &tamanho);
                    printf(" Senha Gerada: ");
                    for( int i = 0; i < tamanho; i++ ){
                         aux = rand() % 2;
                         if(aux == 0){
                                 letras = rand() %26+97;
                                 printf("%c", letras);
                                 }
                         if(aux == 1){
                                num = rand() % 10;                       
                                printf("%d", num);
                                } 
                         }// fim do for                  
                    break;

Share this post


Link to post
Share on other sites
HappyHippyHippo
int tamanho = 0, iter = 0;
...
scanf(.......); /* ler o tamanho do teclado */
...
for (iter = 0; iter < tamanho; iter++) { // ciclo de impressao dos caracteres
  if (iter % 2 == 0)
    printf("%c", (rand() % 26) + 'a'); // imprimir um caracter
  else
    printf("%c", (rand() % 10) + '0'); // imprimir um digito
}


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
pmg
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char **argv) {
  int i;
  char alfabeto[] = "0123456789"
                    "abcdefghijklmnopqrstuvwxyz"
                    "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  int nsimbolos = sizeof alfabeto - 1; /* strlen(alfabeto) */
  int nletras;

  if (argc != 2) {
    fprintf(stderr, "Sintaxe: %s <COMPRIMENTO>\n", argv[0]);
    exit(EXIT_FAILURE);
  }
  srand(time(0));
  nletras = atoi(argv[1]); /* strtol seria melhor para validar erros */
  for (i = 0; i < nletras; i++) putchar(alfabeto[rand() % nsimbolos]); /* ignora "bias" */
  putchar('\n');
  return 0;
}

Edited by pmg
GeSHi update

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
AprendendoC

opa... desse jeito ele faz exatamante como eu queria...  :)

int tamanho = 0, iter = 0;
...
scanf(.......); /* ler o tamanho do teclado */
...
for (iter = 0; iter < tamanho; iter++) { // ciclo de impressao dos caracteres
  if (iter % 2 == 0)
    printf("%c", (rand() % 26) + 'a'); // imprimir um caracter
  else
    printf("%c", (rand() % 10) + '0'); // imprimir um digito
}

desse jeito e mais complicado... tens coisas ai que ainda não aprendi... mas obrigado.. vo guarda pra estudar... :thumbsup:

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

int main(int argc, char **argv) {
  int i;
  char alfabeto[] = "0123456789"
                    "abcdefghijklmnopqrstuvwxyz"
                    "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  int nsimbolos = sizeof alfabeto - 1; /* strlen(alfabeto) */
  int nletras;

  if (argc != 2) {
    fprintf(stderr, "Sintaxe: %s <COMPRIMENTO>\n", argv[0]);
    exit(EXIT_FAILURE);
  }
  srand(time(0));
  nletras = atoi(argv[1]); /* strtol seria melhor para validar erros */
  for (i = 0; i < nletras; i++) putchar(alfabeto[rand() % nsimbolos]); /* ignora "bias" */
  putchar('\n');
  return 0;
}

Obrigado Pessoal pelo ajuda... muito grato!  :thumbsup:

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.