Ir para conteúdo

POWERED BY:

Arquivado

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

milaBastos

Maior de três notas

Recommended Posts

Pessoal queria tirar um duvida básica:

estou trabalhando neste pequeno programa.

há algum problema nele que não sei qual é...

Eu consigo inserir o primeiro nome e a nota, mas o segundo e terceiro nome e nota não consigo...

sendo assim o resultado, após toda a verificação, sai errado.

eu tentei coletar os nomes com o scanf,e ele só armazena até o primeiro espaço!!!certo?

Eu queria saber se há algum comando que armazene nomes completos, com espaço entre o nome e sobrenome.

 

Desde já agradeço...

Este é o código que possuo:

 

 

#include<stdio.h>

#include<conio.h>

 

/* Autor(a):Camila Bastos.

Objetivo:Demonstrar ao usuario qual foi o ganhador de um concurso de piadas.

Sinopse:

Entrada: o nome e a nota dos 3 candidatos finalistas.

Saida:O nome do vencedor e a sua nota.obs:as notas não poderão ser iguais */

 

main()

 

{

char finalista1[20],finalista2[20],finalista3[20];

float nota1,nota2,nota3,maiorNota;

 

printf("\n\t-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_");

printf("\n");

printf(" \t *.* Concurso de Piadas *.* ");

printf("\n\t-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_");

 

printf("\n\tInforme o nome do primeiro candidato:");

gets(finalista1);

printf("\n\tInforme a nota:");

scanf("%f",&nota1);

printf("\n\tInforme o nome do segundo candidato:");

gets(finalista2);

printf("\n\tInforme a nota:");

scanf("%f",&nota2);

printf("\n\tInforme o nome do terceiro candidato:");

gets(finalista3);

printf("\n\tInforme a nota:");

scanf("%f",&nota3);

 

//verificando qual é a maior nota e imprimindo na tela o nome do candidato vencedor.

 

printf("\n\t-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_");

 

maiorNota = nota1;

if (nota2 > maiorNota)

{ maiorNota = nota2;

printf("\n\tO vencedor e %s:",finalista2);

printf("\n\t Sua nota foi: %1.4f",maiorNota) ;

}

else

if (nota3 > maiorNota)

{ maiorNota = nota3;

printf("\n\tO vencedor e %s:",finalista3);

printf("\n\t Sua nota foi: %1.4f",maiorNota);

}

else

{ printf("\n\tO vencedor e %s:",finalista1);

printf("\n\t Sua nota foi: %1.4f",nota1);

}

 

 

printf("\n\t-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-");

getch();

 

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quanto a sua duvida para armazena strings com scanf() é fácil.

 

scanf("%[^\n]", variavel);

Com esse scanf ele ira armazenar a variável incluindo espaços, é possível melhorar ainda um pouco esse scanf, melhorando a segurança do seu código.

 

char palavra[20];
scanf("%19[^\n]", variavel);

Com o código acima o scanf ira pegar apenas os 29 primeiros caracteres, não armazenado nenhum outro caractere, após o 19 :)

 

Eu consigo inserir o primeiro nome e a nota, mas o segundo e terceiro nome e nota não consigo...sendo assim o resultado, após toda a verificação, sai errado.

Isso é pelo buffer possuir uma "sujeirinha" para resolver com diversas formas, da uma lida nesse artigo, que vai lhe esclarecer.

 

Fiz as correções está funciona tranquilo agora :)

 

#include <stdio.h>
#include <stdlib.h> //usada para funcao system();

/* Autor(a):Camila Bastos.
Objetivo:Demonstrar ao usuario qual foi o ganhador de um concurso de piadas.
Sinopse:
Entrada: o nome e a nota dos 3 candidatos finalistas.
Saida:O nome do vencedor e a sua nota.obs:as notas não poderão ser iguais */

int main()
{
	char finalista1[20],finalista2[20],finalista3[20];
	float nota1,nota2,nota3,maiorNota;

	printf("\n\t-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_");
	printf("\n");
	printf(" \t *.* Concurso de Piadas *.* ");
	printf("\n\t-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_");

	printf("\n\tInforme o nome do primeiro candidato:");
	scanf("%19[^\n]",finalista1);
	printf("\n\tInforme a nota:");
	scanf("%f",&nota1);
	getchar();

	printf("\n\tInforme o nome do segundo candidato:");
	scanf("%19[^\n]",finalista2);
	printf("\n\tInforme a nota:");
	scanf("%f",&nota2);
	getchar();

	printf("\n\tInforme o nome do terceiro candidato:");
	scanf("%19[^\n]",finalista3);
	printf("\n\tInforme a nota:");
	scanf("%f",&nota3);
	getchar();


	//verificando qual é a maior nota e imprimindo na tela o nome do candidato vencedor.

	printf("\n\t-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_");

	maiorNota = nota1;

	if(nota2 > maiorNota)
	{ 
		maiorNota = nota2;
		printf("\n\tO vencedor e %s:",finalista2);
		printf("\n\t Sua nota foi: %1.4f",maiorNota) ;
	}


	if (nota3 > maiorNota)
	{ 
		maiorNota = nota3;
		printf("\n\tO vencedor e %s:",finalista3);
		printf("\n\t Sua nota foi: %1.4f",maiorNota);
	}

	else
	{
		printf("\n\tO vencedor e %s:",finalista1);
		printf("\n\t Sua nota foi: %1.4f",nota1);
	}


	printf("\n\t-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-\n");

	system("pause"); // para pausar a tela apos a execucao do programa
	return 0;
}

Espero que tenha lhe ajudado.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites
O código tá imenso!! Em vez de usar tantos if's daria para usar ? e : dentro dos printf's!

 

Sim, e comprometer a legibilidade do código. Se o operador ternário não foi visto ainda, não tem como falar p/ usar porque o professor vai reclamar ou zerar a questão. É a mesma situação de mandar usar um char*.

 

#include <stdio.h>
int main()
{
	char finalista1[20],finalista2[20],finalista3[20];
	float nota1,nota2,nota3,maiorNota;
	char * vencedor;

	printf("\n\t-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_");
	printf("\n");
	printf(" \t *.* Concurso de Piadas *.* ");
	printf("\n\t-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_");

	printf("\n\tInforme o nome do primeiro candidato:");
	scanf("%19[^\n]",finalista1);
	printf("\n\tInforme a nota:");
	scanf("%f",&nota1);
	getchar();

	maiorNota = nota1;
	vencedor = finalista1;

	printf("\n\tInforme o nome do segundo candidato:");
	scanf("%19[^\n]",finalista2);
	printf("\n\tInforme a nota:");
	scanf("%f",&nota2);
	getchar();

	if (nota2 > maiorNota) {
	maiorNota = nota2;
	vencedor = finalista2;
	}

	printf("\n\tInforme o nome do terceiro candidato:");
	scanf("%19[^\n]",finalista3);
	printf("\n\tInforme a nota:");
	scanf("%f",&nota3);
	getchar();

	if (nota3 > maiorNota) {
	maiorNota = nota3;
	vencedor = finalista3;
	}

	printf("\n\tO vencedor e %s:",vencedor);
	printf("\n\t Sua nota foi: %1.4f",maiorNota);

	return 0;
} 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.