Ir para conteúdo

POWERED BY:

Arquivado

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

ralecsander

[Resolvido] utilizar espaço em char

Recommended Posts

Olá amigos!

 

Desculpe incomoda-los mais uma vez

 

mas estou com uma duvida

 

estou com o seguinte codigo

 

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int aluno=2, i;
	float p1[aluno], p2[aluno],p3[aluno], p4[aluno], media[aluno], classe=0;
	char nome[aluno][40];
		  
	
	for (i=0;i<aluno;i++)
	{
		printf("\nInforme o nome do aluno");
		scanf("%s", nome[i]);
		printf ("\nInforme a nota P1 do aluno %d: ", i+1);
		scanf ("%f",&p1[i]);
		printf ("\nInforme a nota P2 do aluno %d: ", i+1);
		scanf ("%f",&p2[i]);
		printf ("\nInforme a nota P3 do aluno %d: ", i+1);
		scanf ("%f",&p3[i]);
		printf ("\nInforme a nota P4 do aluno %d: ", i+1);
		scanf ("%f",&p4[i]);
		media[i]=(p1[i]+p2[i]+p3[i]+p4[i])/4;//calculo da media
	}
	for (i=0;i<aluno;i++)
	{//exbindo valores digitados
		printf ("\nA nota p1 do aluno %s no%d eh %.2f", nome[i], i+1, p1[i]);
		printf ("\nA nota p2 do aluno %s no%d eh %.2f", nome[i], i+1, p2[i]);
		printf ("\nA nota p3 do aluno %s no%d eh %.2f", nome[i],i+1, p3[i]);
		printf ("\nA nota p4 do aluno %s no%d eh %.2f", nome[i], i+1, p4[i]);
		printf ("\n\nA media do aluno %s no%d eh %.2f\n\n", nome[i], i+1, media[i]);
	}
	for (i=0; i<aluno; i++)
	{
		classe += media[i];
	}
	classe = classe / aluno;
	printf ("A media da turma eh %.2f \n\n", classe);

		
	system("pause");
	return(0);
}

estou com problema na hora de colocar o nome do aluno

 

com scanf se eu digitar apenas o primeiro nome vai funcionar normalmente, agora se eu digitar o nome completo não vai funcionar...

 

tentei o fgets e tambem não deu certo.... pois ao colocar o segundo aluno, ao inves de aparecer para digitar o nome do aluno ele parte direto para a digitação da nota do aluno

 

alguem tem alguma idéia?

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente assim no nome:

 

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

 

Agora não lembro como funcionava os conjuntos no scanf mas acho que era assim. Tenta ae.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Experimenta colocar "fflush(stdin);" dpois do scanf:

 

scanf("%s", nome);

fflush(stdin);

 

Provavelmente esta função irá limpar o lixo acumulado do buffer de entrada

porém eu acabei encontrando outro problema aqui:

 

se eu digito por exemplo: Fellipe Silvestrin Severiano

ele so armazena: Fellipe

ele ta armazenando só até o primeiro \0 (espaço)

Compartilhar este post


Link para o post
Compartilhar em outros sites

td bem até funciona, + nem sempre ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

scanf("%s", nome[ i ]);

 

se eu digito por exemplo: Fellipe Silvestrin Severiano

ele so armazena: Fellipe

ele ta armazenando só até o primeiro \0 (espaço)

(espaço não é '\0'. Chuck Norris ja dizia: espaço é espaço e '\0' é '\0', ninguém pode contrariar Chuck Norris!)

 

 

Mas é claro!

você só mandou ele fazer isso...

se você fizesse: "%s %s" ele iria ler Fellipe Silvestrin

 

o José Enésio ja mandou a solução:

scanf("%[^\n]%*c", nome);

 

 

e como disse o quitZAUMMM, não use fflush(stdin).

Compartilhar este post


Link para o post
Compartilhar em outros sites

é como jah foi dito, as vzs funfa, c você prefere neh ..

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara o scanf que o quit postou está certinho, você deve estar fazendo algo errado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo,

 

Já usei também o gets (get string) para pegar o nome e sobrenome da pessoa e funciona tb.

 

Olha esse exemplo simples:

 

#include<stdio.h>
#include<stdlib.h>

main(){
	   char nome[20];
	   printf("\nDigite o nome: ");   //quando você digitar nome (espaço) sobrenome ele pega os dois campos e imprime certinho.
	   gets(nome);
	   printf("\nO nome digitado foi: %s\n\n", nome);
	   system("pause");
}
Agora não consegui implementar o gets usando registros .. no meu caso tenho um registro que tem dentro nome e telefone.

Neste caso pensei que ficaria gets(reg.nome), mas dá erro, o programa não espera eu digitar e já pula pra próxima instrução.

 

Se caso alguém souber solucionar ficaria muito grato!!

 

Abraço a todos!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

abra um novo tópico e poste o código completo para eu ver oq você esta fazendo antes.

 

[]s

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.