Ir ao conteúdo

Erro C++ - Função printf


tamaraviana

Posts recomendados

Postado

Olá!

Estou no primeiro semestre de sistemas de informação e apanhando muuuito com programação.

Tentei fazer um trabalho da faculdade e algumas vezes obtive o mesmo erro.

A proposta é a seguinte:

Tem-se um conjunto de dados contendo a altura e o sexo de 15 pessoas.

Faça um programa que calcule e mostre:

a) A maior e a menor altura;

B) A média de altura das mulheres;

c) O número de homens;

d) O sexo da pessoa mais alta.

Como eu estava testando, não fiz para 15 pessoas e sim para duas...

Fiz o seguinte código:

#include <stdio.h>

#include <conio.h>

char sexo, sexo_mais_alto;

float altura, maior_altura, menor_altura, soma_alturaf, qtd_mulheres;

int qtd_homens,contador;

main()

{

printf ("Entre com os dados referentes as 15 pessoas.\n");

printf ("Dados de entrada: sexo (F ou M) e altura (formato 9.99).\n");

menor_altura=4.00;

maior_altura=0.0;

qtd_homens=0;

qtd_mulheres=0.0;

contador=0;

soma_alturaf=0.0;

for (contador=1;contador<=3;contador++)

{

printf ("Sexo:");

scanf ("%c",&sexo);

printf ("Altura:");

scanf ("%f",&altura);

if (maior_altura<altura)

{

maior_altura=altura;

sexo_mais_alto=sexo;

}

if (menor_altura>altura) menor_altura=altura;

if ((sexo=='F') || (sexo=='f'))

{

soma_alturaf=soma_alturaf+altura;

qtd_mulheres=qtd_mulheres+1.0;

}

else if ((sexo=='M') || (sexo =='m')) qtd_homens=qtd_homens+1;

}

printf ("\nMaior altura: %4.2f",maior_altura);

printf ("\nMenor altura: %4.2f",menor_altura);

printf ("\nMedia de altura das mulheres: %4.2f",soma_alturaf/qtd_mulheres);

printf ("\nNumero de homens: %d",qtd_homens);

printf ("\nSexo da pessoa mais alta: %c",sexo_mais_alto);

getch();

}

Na primeira vez que ele passa pelo laço for, dá tudo certinho. Na segunda vez, ele concatena os dois comandos printf que pedem o sexo e a altura... Eu não entendo porque está acontecendo isso, alguém pode me ajudar?? :(

Obrigada!

Tâmara ^_^

Postado

1º evite de usar variaveis globais, defina elas dentro das funções q irão usar elas...

2º scanf NÃO FUNCIONA, nem com fflush...é preferivel usar fgets ou do genero.

scanf normalmente pega bytes q já foram pegos do 'stream'('arquivo' responsavel pela entrada de dados), além de não ter limite na entrada...

é preferivel usar fgets(char *buffer, unsigned tamanhoBuffer, stdin(arquivo responsavel pela entrada de dados)....a função devolve a string buffer com o que foi inserido...

e para transformar para inteiro, só usar 'atoi'....

Postado

Oi..

Bem, não entendei muito do que você falou porque ainda não conheço muitas funções... só o básico. Mas consegui usar a função fgets como você falou, eu acho. A função atoi eu não sei como utilizar...

Com as alterações que fiz, continua acontecendo a mesma coisa... :confused:

Olha o que fiz:

/*Tem-se um conjunto de dados contendo a altura e o sexo de 15 pessoas.

Faça um programa que calcule e mostre:

a) A maior e a menor altura;

B) A média de altura das mulheres;

c) O número de homens;

d) O sexo da pessoa mais alta. */

#include <stdio.h>

#include <conio.h>

#define MAX 10

char sexo[MAX], sexo_mais_alto[MAX];

float altura, maior_altura, menor_altura, soma_alturaf, qtd_mulheres;

int qtd_homens,contador;

main()

{

printf ("Entre com os dados referentes as 15 pessoas.\n");

printf ("Dados de entrada: sexo (F ou M) e altura (formato 9.99).\n");

menor_altura=4.00;

maior_altura=0.0;

qtd_homens=0;

qtd_mulheres=0.0;

contador=0;

soma_alturaf=0.0;

for (contador=1;contador<=3;contador++)

{

printf ( "Sexo:\n" );

fgets(sexo, MAX, stdin);

printf ( "Altura: \n" );

scanf ( "%f" , &altura );

if (maior_altura<altura)

{

maior_altura=altura;

sexo_mais_alto[MAX] = sexo[MAX];

}

if (menor_altura>altura) menor_altura=altura;

if ((sexo[MAX]=='F') || (sexo[MAX]=='f'))

{

soma_alturaf=soma_alturaf+altura;

qtd_mulheres=qtd_mulheres+1.0;

}

else if ((sexo[MAX]=='M') || (sexo[MAX] =='m')) qtd_homens=qtd_homens+1;

}

printf ("\nMaior altura: %4.2f",maior_altura);

printf ("\nMenor altura: %4.2f",menor_altura);

printf ("\nMedia de altura das mulheres: %4.2f",soma_alturaf/qtd_mulheres);

printf ("\nNumero de homens: %d",qtd_homens);

printf ("\nSexo da pessoa mais alta: %c",sexo_mais_alto);

getch();

}

Postado

Ah! E quanto as variáveis eu tive que declará-las como globais. porque eu tinha que atribuir aqueles valores iniciais antes de entrar no laço...

Postado

Pessoal, aproveitando este tópico, quero perguntar uma coisa.

Quando executo a maioria dos programas no C++, que são códigos bem simples, aparece aquele erro detestável que todo mundo conhece em outros aplicativos: "O arquivo.exe encontrou um erro e precisa ser fechado."

Isso já tá me tirando a paciência, não consigo concluir meus exercícios...

Alguém já passou por isso? sabe o porquê?

Estou usando o Dev-C++

Obrigada!

Tâmara

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!