Ir ao conteúdo

Posts recomendados

Postado

Estou fazendo um programa para armazenar nome, ra e media dos alunos e ver se ele foi aprovado, tudo está indo certo, mas ao escrever o nome, ele armazena e usa para o mesmo nome para os 3 alunos, não pedindo para declarar de novo, o que eu faço para conseguir declarar 3 nomes diferentes mesmo que esses sejam com mais de uma palavra?
 

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

struct alunos {
int ra;
char nome[30];
float media;
};
struct alunos aluno;

int main()
{

for(int i = 1; i<=3;i++)
{

  printf("Digite o nome do aluno %d: ",i);
  scanf("%[^\n]s",aluno.nome);


  printf("Digite o RA do aluno %d: ",i);
  scanf("%d",&aluno.ra);

  printf("Digite a media do aluno %d: ",i);
  scanf("%f",&aluno.media);

  if(aluno.media>=6)
  {
      printf("\nAluno %d: %s , com RA: %d , foi aprovado com a media %.2f \n",i, aluno.nome,aluno.ra,aluno.media);
  }

    else
    {
        printf("\nAluno %d: %s , com RA: %d , foi reprovado com a media %.2f \n",i, aluno.nome,aluno.ra,aluno.media);
    }
}
}

 

  • Curtir 1
Postado

@Gustavo Beck     seu código está bom ,  melhor usar o comando fflush para limpar o teclado , e o fgets para pegar mais de uma palavra ,  então seu código com algumas modificações poderia ser assim  :

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
/*             0     1    2     3   4      5      6      7         8  */
typedef enum{black,blue,green,cyan,red,magenta,brown,lightgray,darkgray,   /* nome das cores */
lightblue,lightgreen,lightcyan,lightred,lightmagenta,yellow,white} colors;
/*  9         10         11        12        13         14    15 */

static int __BACKGROUND = 1/*BLACK*/;/*pode ser o numero ou o nome da cor*/
static int __FOREGROUND = lightgray;

void textcolor_2 (int letras, int fundo){/*para mudar a cor de fundo mude o background*/
    __FOREGROUND = letras;
    __BACKGROUND = fundo;
    SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),
    letras + (__BACKGROUND << 4));
}

struct alunos     {
    int   ra      ;
    char  nome[30];
    float media   ;
};
struct alunos aluno;
int i;
int main(){
    for(i=1; i<4; i++){
        textcolor_2(14,0);
        printf("Digite o nome do aluno %d --: ",i);
        fflush(stdin);                             /* limpar o buffer do teclado */
        fgets(aluno.nome,30,stdin);
        aluno.nome[strlen(aluno.nome)-1]='\0';     /* removendo o newline ,senão pula linha */
        printf("Digite o RA do aluno %d ----: ",i);
        fflush(stdin);                             /* limpar o buffer do teclado */
        scanf("%d",&aluno.ra);
        printf("Digite a media do aluno %d -: ",i);
        fflush(stdin);                             /* limpar o buffer do teclado */
        scanf("%f",&aluno.media);
        if( aluno.media >= 6 ){
            textcolor_2(9,15);
            printf("\n Aluno %d : %s , com RA : %d , foi aprovado com a media %.2f \n\n",
            i, aluno.nome,aluno.ra,aluno.media);
        }
        else{
            textcolor_2(12,15);
            printf("\n Aluno %d: %s , com RA: %d , foi reprovado com a media %.2f \n\n",
            i, aluno.nome,aluno.ra,aluno.media);
        }
    }
    textcolor_2(10,12);
    printf("\n\n\n");
    return 0;
}

 

Postado

Mude:

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

Para:

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

Com espaço antes do especificador (e sem o s no final pois não serve pra nada).

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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!