Ir ao conteúdo
  • Cadastre-se

Duvidas no Laço For


PanteraCordPreto

Posts recomendados

Estou fazendo um programa que aparentemente deveria ser bem simples, no entanto estou tendo dificuldades com os cálculos e a apresentação.

 

O enunciado é o seguinte :

 

FUP QUE LEIA O NOME E AS 3 NOTAS ESCOLARES DE CADA ALUNO DE UMA TURMA DE 60 ALUNOS.
 
PARA CADA ALUNO CALCULAR A MÉDIA E APRESENTAR:
- NOME DO ALUNO
- AS NOTAS DAS PROVAS
- A MÉDIA DO ALUNO
- O RESULTADO DO ALUNO BASEADO NA TABELA ABAIXO:
 
MEDIA RESULTADO
ATÉ 3 REPROVADO
ACIMA DE 3 ATÉ 5 RECUPERAÇÃO
ACIMA DE 5 ATÉ 9 SATISFATÓRIO
ACIMA DE 9 PLENAMENTE SATISFATÓRIO 
 
......................................................................................
 
 
O código que fiz :
 
#include "stdafx.h"
#include "stdlib.h"
 
 
int _tmain(int argc, _TCHAR* argv[])
{
char nome[80] = {'\0'};
float med, soma, nota1, nota2, nota3;
int cont;
 
med = cont = soma = nota1 = nota2 = nota3 = 0;
 
for (cont = 0; cont <= 2; cont++)
{
   printf("\n\n Digite o nome do aluno \n\n");
   gets_s(nome);
 
   printf("\n\n Digite a primeira nota \n\n");
   scanf_s("%f", &nota1);
 
   printf("\n\n Digite a segunda nota \n\n");
   scanf_s("%f", &nota2);
 
   printf("\n\n Digite a terceira nota \n\n");
   scanf_s("%f", &nota3);
 
med = (nota1 + nota2 + nota3) / 3;
 
   printf("\n A media e..:%f \n", med);
 
  if (med <= 3)
      printf("REPROVADO");
  else
  if (med > 3 && med <= 5)
      printf("RECUPERACAO");
else
if (med > 5 && med <= 9)
      printf("SATISFATORIO");
else
{
      printf("PLENAMENTE SATISFATORIO");
}
 
fflush(stdin);
system("cls");
system("pause");
 
}
return 0;
}
 
O problema que ocorre é que tenho dúvidas se devo usar este IF-ELSE e a MEDIA dentro do FOR .
Neste programa que fiz ele abre direitinho pede nome e as 3 notas, mas depois ele deveria mostrar a media e as informações solicitadas do aluno, no entanto ele retorna ao inicio e pede de novo até que o laço que criei de 2 alunos se acabe, eu queria que ele fizesse 1 por 1.
Acaba não mostrando a MEDIA e fechando em seguida.
 
Fico grata pela atenção e ajuda se for possível.
 
 
 
 
 
Link para o comentário
Compartilhar em outros sites

Nossa Mauro muito obrigado mesmo... foi pura falta de atenção.

 

Agora se não for pedir demais, queria tirar mais uma dúvida.

 

Na parte de cima do meu código onde eu peço para digitar o nome, eu gostaria que a pessoa só pudesse digitar letras e não números.

Tentei com um IF-ELSE, mas quando faço a função ele mostra o seguinte erro:

 

Error 3 error C2446: '<' : no conversion from 'int' to 'char *'
Error 4 error C2040: '<' : 'char [80]' differs in levels of indirection from 'int'
5 IntelliSense: operand types are incompatible ("char *" and "int")
 
Eu saquei que o erro é porque eles são incompatíveis "char" e "int", mas como posso fazer para torná-los compatíveis ou até mesmo uma outra função que eu possa usar para não permitir que o usuário digite números na variável "nome".
 
Desde já agradeço sua atenção.
 
Meu programa fico assim, destaquei em vermelho o que estava tentando fazer.:
 
 
#include "stdafx.h"
#include "stdlib.h"
 
 
int _tmain(int argc, _TCHAR* argv[])
{
char nome[80] = { '\0' };
float med, soma, nota1, nota2, nota3;
int cont;
 
med = cont = soma = nota1 = nota2 = nota3 = 0;
 
for (cont = 0; cont <= 60; cont++)
{
 
if (nome > 0 && nome < 100)
printf("ERROR!!");
else
 
printf("\n\n Digite o nome do aluno \n\n");
gets_s(nome);
 
printf("\n\n Digite a primeira nota \n\n");
scanf_s("%f", &nota1);
 
printf("\n\n Digite a segunda nota \n\n");
scanf_s("%f", &nota2);
 
printf("\n\n Digite a terceira nota \n\n");
scanf_s("%f", &nota3);
 
printf("\n \n O Nome do Aluno .:%s \n", nome);
 
printf(" \n A primeira nota e.:%2.f \n", nota1);
printf(" \n A segunda nota e.:%2.f \n", nota2);
printf(" \n A terceira nota e.:%2.f \n", nota3);
 
med = (nota1 + nota2 + nota3) / 3;
 
printf("\n A media e.:%2.f \n", med);
 
if (med <= 3)
printf("\n REPROVADO \n");
else
if (med > 3 && med <= 5)
printf("\n RECUPERACAO \n");
else
if (med > 5 && med <= 9)
printf("\n SATISFATORIO \n");
else
{
printf("\n PLENAMENTE SATISFATORIO \n");
}
 
fflush(stdin);
 
system("pause");
 
}
return 0;
}
 
Link para o comentário
Compartilhar em outros sites

O código abaixo, possui um maneira de fazer, isso de modo simples;

Observe que o scanf esta dentro da condição do while, mas poderia esta dentro do bloco também, restando apenas a função SoLetra

a obrigação de verificar se a entrada esta correta.

 

Execute, e estude-o a vontade.

/* soletra.c -- validação de dados com letras do alfabeto ascii *//*--------Keep it simple--------* | Autor: Mauro Brito           | | e-Mail: [email protected] | | Linguagem:  C 99             | | Plataforma: Windows 32-bit   | | Editor: Code::Blocks v13.12  | *------------------------------*/#include  <stdio.h>  // puts(); printf(); fflush(); putchar() funções#include <stdbool.h> // variável booliano TRUE \ FALSE/* protótipos de funções *//* operação : verifica existente caracteres não alfabéticos      *//* pre-dados: str vetor de char string a ser verificado          *//* pôs-dados: retorna 1 se houve somente letras, 0 senão         */bool SoLetras(char str[]);/* função principal do sistema */int main(void){   char sNomeUsuario[15]; // máximo 14 letras;   char underline = 0;    // grifar nome do usuário.      puts("Entre com seu nome:");      printf("<< ");      while ( (scanf("%s", sNomeUsuario) != 1) || (SoLetras(sNomeUsuario) == 0) )      {         printf("\n\n""[ %s ] detectado invalido!\n", sNomeUsuario);            puts("Entre com seu nome:");            printf("<< ");         fflush(stdin); // limpa o buffer de entrada stdin;      }      printf("\n\n");      underline =      printf("%s", sNomeUsuario); puts(" e um nome bonito. Parabens!");      while(underline--)putchar('-');      puts("\n\n""acabou.""\n\n"); getchar();//PAUSA;   return 0;}/* definição de funções  *//* verifica existente caracteres não alfabéticos */bool SoLetras(char str[]){   int index = 0; // percorre as células do string   while(str[index] /* percorre o string até \0 */)   {      if (str[index] < 'A' || str[index] > 'z' )         if ((str[index]) != ' '/* diferente de espaço */) return false;         index++;   }   return true;}
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!