Sofia-Fonseca Posted March 11, 2012 Report Share Posted March 11, 2012 Alguém me diz por favor porque é que o programe fecha e não deixa colocar o "nome da semente"? #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 More sharing options...
pmg Posted March 11, 2012 Report Share Posted March 11, 2012 #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 More sharing options...
Sofia-Fonseca Posted March 11, 2012 Author Report Share Posted March 11, 2012 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 More sharing options...
seuqram Posted March 11, 2012 Report Share Posted March 11, 2012 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 More sharing options...
pmg Posted March 11, 2012 Report Share Posted March 11, 2012 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 More sharing options...
pmg Posted March 11, 2012 Report Share Posted March 11, 2012 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now