pedrobrms 0 Denunciar post Postado Outubro 15, 2012 Olá, sou novo aqui. Estou com problemas em um algoritmo, onde ele deveria solicitar o nome de um aluno, quatro notas, realizar o cálculo da média, se a média for igual ou maior que 6, apresentar a mensagem "Aluno joão foi aprovado", se for menor, solicitar uma quinta nota, sendo a nota do exame, e se a nota do exame for maior que 5, a mensagem "Aluno joão foi aprovado no exame", se for menor que 5, "Aluno joão foi reprovado." Fiz desta maneira, porém, quando o programa deveria mostrar o nome, ele para de funcionar. Alguém consegue me dar uma força nisso? Grato desde já! #include <stdio.h> #include <stdlib.h> float m1,m2,n1,n2,n3,n4,ne; char nome; int main() { printf ("Digite o nome do aluno:\n",nome); scanf ("%s",&nome); printf ("Digite a primeira nota:\n",n1); scanf ("%f",&n1); printf ("Digite a segunda nota:\n",n2); scanf ("%f",&n2); printf ("Digite a terceira nota:\n",n3); scanf ("%f",&n3); printf ("Digite a quarta nota:\n",n4); scanf ("%f",&n4); m1=(n1+n2+n3+n4)/4; if(m1>=6){ printf ("O Aluno %s ",nome); printf ("Foi aprovado! \n"); printf ("Nota final : %f\n",m1);} else{ printf ("Digite a nota do exame: \n",ne); scanf ("%f",≠); m2=(m1+ne)/2; if (m2>=5){ printf ("O Aluno %s ",nome); printf ("fpo aprovado em exame.\n");} else{ printf ("O Aluno %s ",nome); printf ("foi reprovado.\n");} printf ("Nota final : %f\n",m2);} printf ("Nota final : %f\n",m1); system ("pause");} Compartilhar este post Link para o post Compartilhar em outros sites
Felipe_Volpatto 1 Denunciar post Postado Outubro 15, 2012 Olá. Quando tu diz que ele para de funcionar, o que realmente acontece? O programa fecha? Dá algum erro visível? Tem um 'system ("pause");' no teu último else. Ele deveria ficar fora para ser executado sempre no final e independente do resultado. Compartilhar este post Link para o post Compartilhar em outros sites
reebr 94 Denunciar post Postado Outubro 15, 2012 A variável "nome" é um VETOR DE CARACTERES, sendo assim é necessário especificar um tamanho para guardar o nome. Apenas acrescente um "tamanho", creio que 15 está bom. Veja: #include <stdio.h> #include <stdlib.h> float m1,m2,n1,n2,n3,n4,ne; char nome[15]; int main() Faça isso, depois retorne aqui dizendo se funcionou, abraços. Dica: Você pode "formatar" a nota, evitando assim que fique vários numeros após a virgula. Assim: printf ("Nota final : %2.1f\n",m2); printf ("Nota final : %2.1f\n",m1); %2.1f Compartilhar este post Link para o post Compartilhar em outros sites
pedrobrms 0 Denunciar post Postado Outubro 16, 2012 Olá. Quando tu diz que ele para de funcionar, o que realmente acontece? O programa fecha? Dá algum erro visível? Tem um 'system ("pause");' no teu último else. Ele deveria ficar fora para ser executado sempre no final e independente do resultado. A principio, ele só parava de responder. Não entendi em questão ao 'system ("pause");,' onde eu deveria botar, então? A variável "nome" é um VETOR DE CARACTERES, sendo assim é necessário especificar um tamanho para guardar o nome. Apenas acrescente um "tamanho", creio que 15 está bom. Veja: #include <stdio.h> #include <stdlib.h> float m1,m2,n1,n2,n3,n4,ne; char nome[15]; int main() Faça isso, depois retorne aqui dizendo se funcionou, abraços. Dica: Você pode "formatar" a nota, evitando assim que fique vários numeros após a virgula. Assim: printf ("Nota final : %2.1f\n",m2); printf ("Nota final : %2.1f\n",m1); %2.1f Muito obrigado, eu coloquei o [15] e, deu certo. Porém, realizando testes, quando coloco um nome, por exemplo, Pedro José, o algoritmo falha. Como proceder? Compartilhar este post Link para o post Compartilhar em outros sites
reebr 94 Denunciar post Postado Outubro 16, 2012 Acontece que o comando "scanf" não guarda valores com espaço. Exemplo: Se eu digitar "joão lucas", ele só irá guardar o "joão". Então, neste caso teremos que usar o comando "gets". Uso: gets(variavel); Ficando desta forma: printf ("Digite o nome do aluno:\n",nome); fflush(stdin); gets(nome); tente agora :) -- edit: Agora que notei uma coisa no seu código... Por que você coloca a variável na frente do printf? Por exemplo, na hora que pede para digitar o nome: printf ("Digite o nome do aluno:\n",nome); Não é necessário isso (pelo menos não no seu código). A menos que você queira usar a variável nome em algum lugar da mensagem. Exemplo: "meu nome é %s", nome No caso, você não está utilizando. OBS: não tem problema deixá-la no código porém é mais código para o compilador processar. #include <stdio.h> #include <stdlib.h> float m1,m2,n1,n2,n3,n4,ne; char nome[15]; int main() { printf ("Digite o nome do aluno:\n"); fflush(stdin); gets(nome); printf ("Digite a primeira nota:\n"); scanf ("%f",&n1); printf ("Digite a segunda nota:\n"); scanf ("%f",&n2); printf ("Digite a terceira nota:\n"); scanf ("%f",&n3); printf ("Digite a quarta nota:\n"); scanf ("%f",&n4); m1=(n1+n2+n3+n4)/4; if(m1>=6){ printf ("O Aluno %s ",nome); printf ("Foi aprovado! \n"); printf ("Nota final : %2.1f\n",m1);} else{ printf ("Digite a nota do exame: \n"); scanf ("%f",≠); m2=(m1+ne)/2; if (m2>=5){ printf ("O Aluno %s ",nome); printf ("foi aprovado em exame.\n");} else{ printf ("O Aluno %s ",nome); printf ("foi reprovado.\n");} printf ("Nota final : %2.1f\n",m2);} printf ("Nota final : %2.1f\n",m1); system ("pause");} Compartilhar este post Link para o post Compartilhar em outros sites
pedrobrms 0 Denunciar post Postado Outubro 16, 2012 Acontece que o comando "scanf" não guarda valores com espaço. Exemplo: Se eu digitar "joão lucas", ele só irá guardar o "joão". Então, neste caso teremos que usar o comando "gets". Uso: gets(variavel); Ficando desta forma: printf ("Digite o nome do aluno:\n",nome); fflush(stdin); gets(nome); tente agora :) -- edit: Agora que notei uma coisa no seu código... Por que você coloca a variável na frente do printf? Por exemplo, na hora que pede para digitar o nome: printf ("Digite o nome do aluno:\n",nome); Não é necessário isso (pelo menos não no seu código). A menos que você queira usar a variável nome em algum lugar da mensagem. Exemplo: "meu nome é %s", nome No caso, você não está utilizando. OBS: não tem problema deixá-la no código porém é mais código para o compilador processar. #include <stdio.h> #include <stdlib.h> float m1,m2,n1,n2,n3,n4,ne; char nome[15]; int main() { printf ("Digite o nome do aluno:\n"); fflush(stdin); gets(nome); printf ("Digite a primeira nota:\n"); scanf ("%f",&n1); printf ("Digite a segunda nota:\n"); scanf ("%f",&n2); printf ("Digite a terceira nota:\n"); scanf ("%f",&n3); printf ("Digite a quarta nota:\n"); scanf ("%f",&n4); m1=(n1+n2+n3+n4)/4; if(m1>=6){ printf ("O Aluno %s ",nome); printf ("Foi aprovado! \n"); printf ("Nota final : %2.1f\n",m1);} else{ printf ("Digite a nota do exame: \n"); scanf ("%f",≠); m2=(m1+ne)/2; if (m2>=5){ printf ("O Aluno %s ",nome); printf ("foi aprovado em exame.\n");} else{ printf ("O Aluno %s ",nome); printf ("foi reprovado.\n");} printf ("Nota final : %2.1f\n",m2);} printf ("Nota final : %2.1f\n",m1); system ("pause");} Deu certo, obrigado! eu usava a variável na frente do printf de costume mesmo, mas obrigado pela dica! Compartilhar este post Link para o post Compartilhar em outros sites