Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Entre para seguir isso  
Cristian Kirsch Foesch

C Imprimir string em C

Recommended Posts

Galera, quando vou imprimir uma struct ela da erro e fecha o programa, como resolver?

								/*seminario
							Comandos = if, switch
							Funções = soma, troca
							Vetores e tipo construído
							Como criar e preencher estrutura*/
#include <stdio.h>
#include <stdlib.h>

struct ficha_aluno{
	float nome;
	float idade;
	float matricula;
};

struct ficha_aluno aluno;
float media (int n, float *vnotas); //Declarando a função media
int main (void)
{
printf("                                          Digite o nome do aluno(a):\n");
scanf("%s", &aluno.nome);
printf("                                          Digite a idade do aluno:\n");
scanf("%f", &aluno.idade);
printf("                                        Digite o numero de matricula:\n");
scanf("%f", &aluno.matricula);
printf("-----------------------------------------------------------------------------------------------------------------------\n\n");

float vnotas[4];
int semestre;
float media_notas;															
int i;

	for (i = 0; i < 4; i++) //Leitura das medias
{

	printf("                                         Digite os valores das notas:\n");
	scanf("%f", &vnotas[i]);    
  }                             //i
printf("-----------------------------------------------------------------------------------------------------------------------\n");
printf("                          Digite o ano de ingresso para saber em que semestre o aluno esta:\n\n");
scanf("%d", &semestre);
 if(semestre <2017){
 	printf("error 404\n");
 	printf("Semestre inserido invalido\n");
 }
	switch( semestre ){
		case 2017 :    
		printf("                                      O aluno esta no Segundo semestre\n");
		break;
		case 2018 :
		printf("                                      O aluno esta no Primeiro semestre\n");
		break;	
	}
//Chamada da função
media_notas = media(4,vnotas); 
	printf("\nQuadro de notas\n");
	printf("Nome:\n %s", aluno.nome);
 	printf( "\n                                        Media = %.1f \n", media_notas );

  
	// Se a media for maior que 7, imprime que o aluno esta aprovado 
	if(media_notas >=7){
				printf("Aluno Aprovado :)\n");
		printf("O aluno pode prosseguir para o proximo semestre\n");}
	
	// Se a media for menor que 7, imprime que o aluno esta repovado 
	else{

		printf("Aluno Reprovado :(\n");   		
   		printf("O aluno deve refazer a materia ou fazer a resolucao\n\n");}
system("pause");
return 0;
}
/*Função para cálculo da média 
   Parâmetros: 
      Recebe a quantidade de elementos n
      Recebe o endereço inicial do vetor notas em *vnotas
   Retorno: 
     Retorna a media na variavel m */
float media (int n, float *vnotas)
{
int i;
//Realiza a soma das notas   
float m = 0, soma = 0;
	for (i = 0; i < n; i++)
		soma = soma + vnotas[i]; 
//Realiza a divisão das notas pelo numero de elementos
m = soma / n; 
//Retorna a media
	return m;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

float nome;? Se fosse 3.14 poderiamos o chamar de PI. :lol:

Vamos ver si deixamos claro ja como funciona as tais estruturas.

Primeiro vamos deixar claro como funciona uma string, e como imprimila corretamente.
Para declarar uma string fazemos assim:

char nome[100];

Isso dai é um array de 100 letras maximo.

Para imprimir você deve fazer:

printf("%s", nome);

Não é preciso por & adiante de nome para imprimir. Lembre-se disso.

Para realizar a leitura fazemos:

scanf("%s", nome);

Não devemos por & adiante, tal como nos casos de float, int, etc, com strings não colocamos & adiante, lembre-se disso.

Por outro lado se seu nome tiver espaços tal como "Raul Pepino" você deve usar o scanf desta forma:

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

O scanf tem a "má" costume de ler até encontrar um espaço em branco, um tabulador ou até encontrar o caracter enter(\n), fazendo o scanf desta forma você garante que ele tambem faça leitura de espaços.

Até aqui nada novo, vamos ver como fariamos com as structs. Mas primeiro faça a pergunta... Que é uma struct? Antes de lhe dizer que é uma struct vou lhe dizer que é um array. Um array é um conjunto de dados, um array é umconjunto de dados do mesmo tipo. Por serem todos os dados do array do mesmo tipo significa que podemos usar os indices, tipo nome[1], nome[2], etc, internamente, como já falei, os dados tem um tamanho igual e por esse motivo ao ler os dados estamos "pulando" dados, porém todos são do mesmo tipo, então os saltos são sempre iguais, coisa que não é assim com as structs e agora veremos.

As estruturas são como arrays, conjuntos de dados, porém de tipos diferentes, em uma estrutura eu posso ter dados simples como int, float, char, etc, e incluso outros dados complexos como outras structs, isso ja da para ver que os dados não tem o mesmo tamanho e por isso com structs não podemos usar os indices como nos arrays. Então como acessamos aos dados? Isso veremos agora.

Para declarar uma estrutura fazemos:
struct Dados{
int idade;
float salario;
char nome[100];
};

Quando eu declaro essa estrutura eu não estou declarando uma variavel, eu só estou dizendo ao compilador "como será a forma" da variavel.

Para criar uma variavel eu faço:
struct Dados aluno1;

para preencher esses dados faço o seguinte:
aluno1.idade = 18; // Eu estou acessando a idade do aluno1, poderia haver aluno2, aluno3, ou incluso professor.idade.
aluno1.nota = 7.14;

Para o nome a cois ase complica um pouco, se eu não for usar scanf para ler os dados tenho que usar a função strcpy para atribuir os dados:
strcpy (aluno1.nome, "Raul Pepino"); // Aqui atribuo o nome com a função strcpy da biblioteca string.h que precisa ser declarado ao inicio do arquivo fonte.

caso queira ler com scanf e com spaços seria:

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


E para imprimir?

printf("%s", aluno1.nome);


Tambem pode ser criada uma lista de alunos
struct Dados aluno[3];

E poderia preencher desta forma:
aluno[0].idade = 20;
strcpy(aluno[0].nome, "Rodolfo");

aluno[1].nota = 3.14;

E para imprimir:
printf ("%s", aluno[2].nome);

é obvio que você precisa de um while ou for para imprimir e ler arrays de estruturas. Acredito que com isso você seja capaz de imprimir o que necessite.

lhe recomendo você limpar o buffer entre leituras PRESTE ATENÇAO AQUI!!!!
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×