Jump to content

Erro básico de iniciante concerteza...


Sofia-Fonseca
 Share

Recommended Posts

Alguém me diz por favor porque é que o programe fecha e não deixa colocar o "nome da semente"? :wallbash:

#include <stdio.h>

main()
{   
      char nome[20];
      char nome_semente[10];
      int duracao;
      
      
      
      printf("Nome do evento: ");
      scanf("%20[^\n].", &nome);
      printf("Duração do evento em minutos: ");
      scanf("%d.", &duracao);
      printf("Nome da semente: ");
      scanf("%10[^\n].", &nome_semente);  
      getchar();
}

Sou novata, preciso de um desconto...

Obrigada! 😉

Link to comment
Share on other sites

#include <stdio.h>

main()
{   
      char nome[20];
      char nome_semente[10];
      int duracao;
      
      
      
      printf("Nome do evento: ");
      scanf("%20[^\n].", &nome);
      printf("Duração do evento em minutos: ");
      scanf("%d.", &duracao);                                    /* PARA QUE É O PONTO ??? */
                                                                 /* o scanf fica a espera dele para sempre */
      printf("Nome da semente: ");
      scanf("%10[^\n].", &nome_semente);  
      getchar();
}

Mais sugestoes:

1) se o array foi declarado com 20 elementos, usa 19 no scanf()

    char nome[20];
    scanf("%19[^\n]", nome);

2) O & no scanf, para arrays, nao é necessário. Os arrays sao automagicamente convertidos para ponteiros para o seu primeiro elemento ... e o scanf quer mesmo um ponteiro.

A diferenca entre nao por ou por o & pode ser problematica em computadores "esquisitos" ... mas fica sempre bem meter o valor e tipo correcto 😉

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!

Link to comment
Share on other sites

Obrigada pela pronta resposta!  🙂

Fiz as correções  sugeridas mas continua sem funcionar. 😉

#include <stdio.h>

main()
{   
      char nome[20];
      char nome_semente[20];
      int duracao, tempo_crescimento, terreno, terrenos_usar;
        
      printf("Nome do evento: ");
      scanf("%19[^\n]", nome);
      printf("Duração do evento em minutos: ");
      scanf("%d", &duracao);
      printf("Nome da semente: ");
      scanf("%19[^\n]", nome_semente);      
    /*printf("Tempo de crescimento em minutos: " );
      scanf("%d.", &tempo_crescimento);
      printf("Tipo de terreno (coloque: 4 para 4x4, 2 para 2x2 ou 1 para 1x1): ");
      scanf("%d", &terreno);
      printf("Numero de terrenos a usar para o evento: ");
      scanf("%d", &terrenos_usar);*/
      
      getchar();
}
Link to comment
Share on other sites

es n percebo la muito disto: "%19[^\n]"

mas o que faria era isso:

#include <stdio.h>

main()
{   
      char nome[20];
      char nomesemente[20];
      int duracao, tempo_crescimento, terreno, terrenos_usar;
        
      printf("Nome do evento: ");
      scanf("%s", &nome[19]);
      printf("Duraçao do evento em minutos: ");
      scanf("%d", &duracao);
      printf("Nome da semente: ");
      scanf("%s", &nomesemente[19]);      
      getchar();
}
Link to comment
Share on other sites

O problema agora é o eterno problema do scanf 😉

Depois de escreveres o numero de minutos das um ENTER, certo?

O ENTER fica no buffer, a espera de ser lido ... e quando o programa chega ao

      scanf("%19[^\n]", nome_semente);

mete uma string vazia no nome_semente porque o ENTER nao é necessario na string.

A boa solucao:

usa fgets() e sscanf() em vez do scanf().

    char tmp[80];
    ...
    fgets(tmp, sizeof tmp, stdin);
    sscanf(tmp, "%d", &duracao);

A ma solucao:

Le e ignora o ENTER a seguir ao numero, por exemplo (... eu vou mesmo escrever isto??? ???? ?????)

    ...
    scanf("%d", &duracao);
    getchar(); /* le e ignora o ENTER */
    ....

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!

Link to comment
Share on other sites

es n percebo la muito disto: "%19[^\n]"

    ...

      scanf("%s", &nome[19]);

Xiiiiiiiiiiiii, que confusao para ai vai 😉

No codigo

scanf("%19[^\n]", nome);

O 19 serve para, no maximo 19 caracteres serem metidos na variavel indicada (o caracter #20 seria o '\0' para "fechar" a string).

O codigo

      scanf("%s", &nome[19]);

faria uma palavra sem limite de tamanho ser escrita na posicao 19 do nome para a frente. Como nome so tem 20 posicoes disponiveis (e uma dessas 20 posicoes tem de ser preenchida com o '\0') qualquer input com mais de uma letra faria ocorrer um buffer overflow!

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!

Link to comment
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
 Share

×
×
  • 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.