enginner Postado Julho 8, 2015 Denunciar Share Postado Julho 8, 2015 Desculpem a minha falta de conhecimento, comecei a pouco tempo o estudo de C, e como a maioria estou tendo problemas com um código com o uso de string na estrutura for. O problema é o seguinte, perguntar o nome e a idade 10 vezes. // é apenas um exemplo. Mas ele só faz isso no primeiro loop, já nos proximos ele so pede para entrar com a idade ignorando o nome. Aqui está o código: #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { char nome[41]; int idade; int c; for (c = 1; c <= 10; c++) { printf("Digite seu nome: "); gets(nome); printf("Digite sua idade: "); scanf("%c", &idade); } system("pause"); return 0; } Gostaria de saber qual o problema e como posso resolve-lo. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Felipe222 Postado Julho 8, 2015 Denunciar Share Postado Julho 8, 2015 (editado) Olá! Olha sou iniciante em programação, mas vou tentar lhe ajudar . . . - Bom com relação aos 2 Alertas seguintes, eles estão ocorrendo porque a função gets(), pode causar diversos problemas, por isso é aconselhável não utilizá-la: - |15|warning: ‘gets’ is deprecated (declared at /usr/include/stdio.h:638) - |15|aviso: the `gets' function is dangerous and should not be used. - |18|warning: format ‘%c’ expects argument of type ‘char *’, but argument 2 has type ‘int *’ - este alerta está acontecendo porque você usou o código de formatação errado para a entrada de dados, onde o correto seria usar %d. - Além disso dependendo do caso um outro componente que pode estar causando o problema, é com relação a limpeza do buffer de entrada do teclado, leia estes posts para saber mais sobre: buffer do teclado, gets(); e fflush(stdin); https://www.scriptbrasil.com.br/forum/topic/179418-meu-programa-so-le-a-primeira-variavel/ https://www.scriptbrasil.com.br/forum/topic/179317-ajuda-em-urna-eletronica-em-c/ http://forum.imasters.com.br/topic/537641-funcao-gets/ http://forum.imasters.com.br/topic/336835-tutorial-systempause-e-fflushstdin/ - Alem do mais o seu codigo não está trabalhando com vetores, depois de fazer as alterações acima tente colocar um printf depois do laço for para exibir o conteudo, o seu codigo está apenas trabalhando com simples variaveis, ou seja, da forma que você fez apenas o ultimo valor é o que vai existir nas variaveis que você esta usando, o correto seria declarar as suas variaveis char nome [ 10 ] [ 41 ] e int idade [ 10 ] - Outra coisa tente evitar fazer chamadas ao sistema usando funções como system("pause"); alem de reduzir a portabilidade do codigo em diferentes plataformas, podem causar problemas dificeis de serem detectados, se a sua intenção era o de evitar que a tela do programa se fechasse logo apos ser aberta, você pode usar getchar(); no lugar de system("pause"); Dei uma corrigida no codigo: #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { char nome [ 10 ][ 41 ]; int idade [ 10 ]; int c; for ( c = 1; c <= 10; c++ ) { printf ( "Digite seu nome: " ); scanf ( "%s", nome [ c ] ); printf ( "Digite sua idade: " ); scanf ( "%d", &idade [ c ] ); } getchar (); return 0; } - Lembrete: o scanf(), tem uma caracteristica que compromete a entrada de strings neste caso (nomes) com espaços em branco e etc.... mas acho que isto está melhor explicado em um dos links que postei. Bom por hora é só, preciso ir . . . Ubuntu 14.04 GNU GCC 4.8 CodeBlocks 13.12 Espero Ter Ajudado ! ! ! Editado Julho 8, 2015 por Felipe-Petrópolis Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 enginner Postado Julho 8, 2015 Autor Denunciar Share Postado Julho 8, 2015 Vlw amigos, consegui resolver o problema!!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
enginner
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.