Respostas no Fórum
-
AutorPosts
-
Rafael Alonso Barbosa SantosParticipante
-
Essa é minha Solução, se te ajudar a entender segue meu código!
programa { inclua biblioteca Texto --> t funcao inicio() { cadeia nome = "", h_velho = "", h_jovem = "", m_velha = "", m_jovem = "", sexo = "" inteiro idade = 0, h_id_mvelho = 0, h_id_mjovem = 0, m_id_mvelha = 0, m_id_mjovem = 0, h = 0, f = 0, c = 1 enquanto (c <= 5) { escreva("------------------------\n") escreva(c, "º PESSOA:\n") escreva("Nome: ") leia(nome) escreva("Sexo [M/F]: ") leia(sexo) escreva("Idade: ") leia(idade) sexo = t.caixa_alta(sexo) se (sexo == "F") { f++ se (f == 1) { m_velha = nome m_jovem = nome m_id_mvelha = idade m_id_mjovem = idade } senao se(idade > m_id_mvelha) { m_id_mvelha = idade m_velha = nome } senao se (idade < m_id_mjovem) { m_id_mjovem = idade m_jovem = nome } } senao se (sexo == "M") { h++ se (h == 1) { h_velho = nome h_jovem = nome h_id_mvelho = idade h_id_mjovem = idade } senao se (idade > h_id_mvelho) { h_velho = nome h_id_mvelho = idade } senao se (idade < h_id_mjovem) { h_jovem = nome h_id_mjovem = idade } } c++ } escreva("==================================================\n") escreva("Ao todo tivemos ", h, " homen(s) e ", f, " mulhere(s).\n") escreva("O homem mais jovem é ", h_jovem, " com ", h_id_mjovem, " ano(s).\n") escreva("O homem mais velho é ", h_velho, " com ", h_id_mvelho, " ano(s).\n") escreva("A mulher mais jovem é ", m_jovem, " com ", m_id_mjovem, " ano(s).\n") escreva("A mulher mais velha é ", m_velha, " com ", m_id_mvelha, " ano(s).\n") escreva("==================================================\n\n") } }
Rafael Alonso Barbosa SantosParticipanteBoa noite, único erro que notei no seu código é ter feito a transformação na declaração da variável, pois nesse momento o n1 e n2 ainda não tem valores correspondentes, se você simplesmente jogar a função no código após a leitura dos números o programa irá funcionar corretamente, bastando trocar a variavel divint para divreal no campo DIVISÂO REAL.
Segue abaixo seu código corrigido, da uma olhada e veja se compreende o erro!programa { inclua biblioteca Tipos --> t funcao inicio() { inteiro n1, n2, soma, sub, divint, mult real modulo, divreal escreva ("Digite um valor: ") leia (n1) escreva ("Digite outro valor: ") leia (n2) escreva ("——RESULTADOS——-\n") soma = n1 + n2 sub = n1 - n2 mult = n1 * n2 divint = n1 / n2 divreal = t.inteiro_para_real(n1) / t.inteiro_para_real(n2) modulo = n1 % n2 escreva ("SOMA = " +soma+ "\n") escreva ("DIFERENÇA = " +sub+ "\n") escreva ("PRODUTO = " +mult+ "\n") escreva ("DIVISÃO INTEIRA = " +divint+ "\n") escreva ("DIVISÃO REAL = " +divreal+ "\n") escreva ("RESTO DA DIVISÃO = " +modulo+ "\n") } }
Rafael Alonso Barbosa SantosParticipanteBoa Tarde Pessoal, depois de muitas tentativas descobri o BUG do fflush().
O BUG ocorre quando usamos no código a quebra de linha na linha anterior a entrada de dados, depois que mudei a ordem dos \n o programa funcionou corretamente!
segue abaixo o código corrigido!
#include <stdio.h> #include <locale.h> #include <string.h> void main() { setlocale(LC_ALL, "Portuguese"); char nome1[20], nome2[20], nome3[20], sexo1, sexo2, sexo3; float nota1, nota2, nota3; printf("<<< EX004 - Listagem Pessoas >>>\n"); printf("\nCadastrar primeira pessoa: \n"); fflush(stdin); printf("NOME: "); fgets(nome1, 30, stdin); printf("SEXO [M/F]: "); fflush(stdin); sexo1 = getchar(); printf("NOTA: "); scanf("%f", ¬a1); printf("Cadastrar segunda pessoa: \n"); fflush(stdin); printf("NOME: "); fgets(nome2, 30, stdin); printf("SEXO [M/F] "); sexo2 = getchar(); printf("NOTA: "); scanf("%f", ¬a2); printf("Cadastrar terceira pessoa: \n"); fflush(stdin); printf("NOME: "); fgets(nome3, 30, stdin); printf("SEXO [M/F]: "); sexo3 = getchar(); printf("NOTA: "); scanf("%f", ¬a3); int quebra1 = strcspn(nome1, "\n"); nome1[quebra1] = '\0'; int quebra2 = strcspn(nome2, "\n"); nome2[quebra2] = '\0'; int quebra3 = strcspn(nome3, "\n"); nome3[quebra3] = '\0';
Rafael Alonso Barbosa SantosParticipanteSó retificando o código esqueci de mudar o scanf dos Nome para fgets, mas testei aqui e BUG ocorro da mesma maneira não entrando os dados corretamente!
<<<<<—— EX004 LISTAGEM ——>>>>>>
Cadastrando a primeira pessoa.
——————————-
NOME: Rafael Santos
SEXO [M/F]: M
NOTA: 8
Cadastrando a segunda pessoa.
——————————
NOME: SEXO [M/F]: F
NOTA: 10
Cadastrando a terceira pessoa.
——————————-
NOME: SEXO [M/F]: M
NOTA: 6Listagem Completa.
————————————
NOME SEXO NOTA
Rafael Santos
8.010.0
6.0
————————————Rafael Alonso Barbosa SantosParticipanteVamos la, acredito que os bugs estão presente na versão 9 do GCC pois testei no Linux, no Windows e o Comando fflush não funciona!
tentei por diversas vezes usar fflush junto com getchar() e toda vez no EX004 que tem q cadastrar mais de uma cadeira o problema sempre ocorre, vou postar aqui meu código, mas ja fiz os teste tanto com fgets, com scanf e todos eles pula alguma parte na hora de colocar os dados, não sendo possivel realizar o exercicio com clareza!#include <stdio.h> #include <locale.h> #include <string.h> void main() { setlocale(LC_ALL, "Portuguese_Brasil"); char nome1[30], nome2[30], nome3[30]; char sexo1, sexo2, sexo3; float nota1, nota2, nota3; printf("<<<<<------ EX004 LISTAGEM ------>>>>>>\n"); printf("Cadastrando a primeira pessoa.\n"); printf("-------------------------------\n"); printf("NOME: "); fflush(stdin); fgets(nome1, 30, stdin); printf("SEXO [M/F]: "); fflush(stdin); getchar(); sexo1 = getchar(); printf("NOTA: "); fflush(stdin); scanf("%f", ¬a1); printf("Cadastrando a segunda pessoa.\n"); printf("------------------------------\n"); printf("NOME: "); fflush(stdin); getchar(); scanf("%s", nome2); printf("SEXO [M/F]: "); fflush(stdin); getchar(); sexo2 = getchar(); printf("NOTA: "); fflush(stdin); scanf("%f", ¬a2); printf("Cadastrando a terceira pessoa.\n"); printf("-------------------------------\n"); printf("NOME: "); fflush(stdin); getchar(); scanf("%s", nome3); printf("SEXO [M/F]: "); fflush(stdin); getchar(); sexo3 = getchar(); printf("NOTA: "); fflush(stdin); scanf("%f", ¬a3); int quebra1 = strcspn(nome1, "\n"); nome1[quebra1] = '\0'; int quebra2 = strcspn(nome2, "\n"); nome2[quebra2] = '\0'; int quebra3 = strcspn(nome3, "\n"); nome3[quebra3] = '\0'; printf("\nListagem Completa."); printf("\n------------------------------------"); printf("\nNOME\t\tSEXO\tNOTA"); printf("\n%s\t\t%c\t%.1f", nome1, sexo1, nota1); printf("\n%s\t\t%c\t%.1f", nome2, sexo2, nota2); printf("\n%s\t\t%c\t%.1f", nome3, sexo3, nota3); printf("\n------------------------------------"); printf("\n\n"); }
RESULTADO!
<<<<<—— EX004 LISTAGEM ——>>>>>>
Cadastrando a primeira pessoa.
——————————-
NOME: Rafael Santos
SEXO [M/F]: M
NOTA: 8
Cadastrando a segunda pessoa.
——————————
NOME: Eduarda Santos
SEXO [M/F]: NOTA: Cadastrando a terceira pessoa.
——————————-
NOME: SEXO [M/F]: M
NOTA: 8Listagem Completa.
————————————
NOME SEXO NOTA
Rafael Santos
8.0
Eduarda S 0.0
ntos M 8.0
————————————Rafael Alonso Barbosa SantosParticipanteO BUG que eu quis dizer é que todos os comando da aula não funciona ele pula pra linha seguinte,
Porém o exemplo que você deu funciona mas faz uma quebra de linha automática no printf após exibir o nome!Exemplo:
printf("Qual seu nome? "); fgets(nome, 30, stdin); printf("Prazer em conhecê-lo %s seja bem vindo!", nome);
O resultado fica assim na tela!
Qual seu nome? Rafael
Prazer em conhecê-lo Rafael
seja bem vindo // o seja bem vindo pula para linha de baixo após a variável nome ser exibida!Rafael Alonso Barbosa SantosParticipanteBoa noite, também estou com dificuldade usando Linux 20.04, nenhum dos comandos funciona corretamente, todos tem bugs, já a maneira que a tutora Mayla disponibilizou não consegui compreender corretamente se puder fazer um exemplo de como utilizar o fgets() agradeço!
-
AutorPosts