Ir ao conteúdo

Posts recomendados

Postado

Preciso modificar esse código de tal forma que o usuário possa entrar apenas com notas entre 0 e 10. Se o usuário entrar com uma nota fora deste intervalo, o programa deve solicitar novamente essa nota até que o usuário entre com um valor válido:

 

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


int main()
{
    float nota, media;
    int de_novo, n_notas, i;
    
    do {
    printf("Insira a quantidade de notas:\n");
    scanf("%d", &n_notas);
    media = 0;
    i = 0;
    while (i < n_notas)
    {
    printf ("Entre com a nota_%d : ", i + 1);
    scanf ("%f", &nota);
    media = media + nota;
    i = i + 1;
}
    if (n_notas > 0)
    {
    media = media / n_notas;
    printf ("A media do aluno e: %0.2f \n", media);
    if (media >= 6.0){
        printf("Aprovado\n");
    }
    else {
        printf("Reprovado\n");
    
    }
    }
    else{
    printf ("Quantidade de notas inválida\n");
    }
    printf("Se quiser efetuar outro calculo digite 1, se não quiser, digite 0.\n");
    scanf("%d", &de_novo);

    } while(de_novo);
    return 0;
}

  • Obrigado 1
Postado

Tenta assim:

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

int main() {
    int quantidade = 0;

    double entrada = 0;
    double media = 0;

    char repetir = 's';
    char situacao[10] = "";

    do {
        // Limpar a tela
        system("clear");    // Linux
//         system("cls");      // Windows

        printf("Quantidade de notas: ");
        scanf("%i", &quantidade);

        if (quantidade <= 0)    // Valor inválido
            exit(1);            // Saída com erro

        for (int i = 0; i < quantidade; ++i) {
            do {
                printf("Nota [%i de %i]: ", i, quantidade);
                scanf("%lf", &entrada);
            } while (entrada < 0 || entrada > 10);

            media += entrada;
        }

        media /= quantidade;

        if (media >= 6)
            strcpy(situacao, "Aprovado");
        else
            strcpy(situacao, "Reprovado");

        printf("------------------------ \n");
        printf("   Média: %.2f \n", media);
        printf("Situação: %s \n", situacao);
        printf("------------------------ \n");

        printf("Repetir? [ S / N ]: ");
        scanf(" %c", &repetir);
    } while (repetir == 's');

    return 0;
}

 

  • Curtir 1
  • Obrigado 1
Postado

@Lucca Rodrigues

@Lucca Rodrigues       seu código está bom , e para que ele repita se for digitado um número inválido , você pode usar um loop do / while ,  ou o goto , ou while ,  e uma variável para verificar se o número digitado é válido ou não , então seu código com algumas modificações poderia ser assim   :

 

#include <stdio.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>
#include <locale.h>
#include <windows.h>
int letras[16][7]={{15,16,14, 1,30}, /* letra  S */
                   {14,17,31,17,17}, /* letra  A */
                   {14, 4, 4, 4,14}, /* letra  I */
                   {17,25,21,19,17}, /* letra  N */
                   {30,17,17,17,30}, /* letra  D */
                   {14,17,17,17,14}, /* letra  O */
                   { 0, 0, 0, 0, 0}, /* letra    */
                   { 1, 2, 4, 0,16}, /* letra  ! */
                  };

/*             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));
}
                  /* y = linha de 0 a 24 , x = coluna de 0 a 80 */
void gotoxy_2(int x, int y){/*imprimir na linha e coluna desejada */
  COORD c;
  c.X = x;
  c.Y = y;
  SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}
int sm[8]={800,400,800,400,2500,200,2500,200};
void som(int f, int d){
    Beep(f,d);/* primeiro a frquência depois o tempo de duração do som */
}
int main()
{
    srand(time(NULL));
    float nota, media;
    int de_novo, n_notas,i,flag;
    textcolor_2(1,15);
    system("cls");
    do {
        textcolor_2(12,15);
        printf("Insira a quantidade de notas : ");
        textcolor_2(4,15);
        scanf("%d", &n_notas);
        media = 0;
        i =  0;
        while (i < n_notas)
        {
            do{
                textcolor_2(6,15);
                printf ("Entre com a nota_%d : ", i + 1);
                textcolor_2(2,15);
                scanf ("%f", &nota);
                flag=0;
                if(nota<0 || nota>10)flag=1;
            }while(flag);
            media += nota;
            i++;
        }
        if (n_notas > 0)
        {
            media = media / n_notas;
            textcolor_2(12,11);
            printf ("\nA media do aluno e: %0.2f \n", media);
            if (media >= 6.0){
                textcolor_2(10,12);
                printf("\nAprovado\n");
            }
            else {
                textcolor_2(8,14);
                printf("\nReprovado\n");

            }
        }
        else{
            textcolor_2(12,15);
            printf ("\nQuantidade de notas inválida\n");
        }
        textcolor_2(2,14);
        printf("\nSe quiser efetuar outro calculo digite 1, se não quiser, digite 0.\n   -> ");
        textcolor_2(12,15);
        scanf("%d", &de_novo);

    } while(de_novo);

    int w,px,py,x;                            /* variáveis simples                       */
    HANDLE hOut;                              /* controle dos dispositivos do pc         */
    hOut= GetStdHandle(STD_OUTPUT_HANDLE);    /* pega a saída padrão                     */
    CONSOLE_SCREEN_BUFFER_INFO SBInfo;        /* informações sobre a buffer da tela      */
    GetConsoleScreenBufferInfo(hOut, &SBInfo);/* pega a posição do cursor do console     */
    px = SBInfo.dwCursorPosition.X;           /* pX será a posição da coluna do cursor no console */
    py = SBInfo.dwCursorPosition.Y;           /* pY será a posição da linha do cursor no console  */

    int y1=py,x1=29,y2=y1,x2=x1,j,a,b;    /*y1=linha inicial  y2 para recuperar a linha inicial*/
    for(i=0;i<8;i++){                     /*  sao 8 letras                                    */
        textcolor_2(rand()%15,15);
        for(j=0;j<5;j++){                 /*o caractere é de 5 linhas                          */
            x1 = x2;
            a=letras[i][j];               /*pega o numero da 1 linha do caractere              */
            for(b=0;b<5;b++){             /*aqui eh um numero de apenas 8 bits                 */
                gotoxy_2(x1,y1);
                if(a % 2 != 0){           /*se bit 0 igual 1                                   */
                    printf("%c",219);     /*coloca espaço invertido senão coloca espaço normal */
                }
                else{
                    printf(" ");          /*senão coloca espaço normal                         */
                }
                a=a/2;                    /*dividindo numero por 2 desloca os bits para direita*/
                x1--;
                Sleep(1);
            }
            y1++;                   /*muda para proxima linha                                  */
            x1=x2;                  /*volta para a coluna inicial                              */
        }                           /*proxima linha                                            */
        x2=x2+6;                    /*avança 8 colunas posicionando para o prox caract         */
        /*x1=x2;*/
        y1=y2;                      /*volta para linha inicial                                 */
    }                               /*imprimiu o primeiro caractere                            */
    for(j=0;j<8;j+=2)
        som(sm[j],sm[j+1]);
    Sleep(3000);
    for(x=0;x<5;x++)printf("\n");
    return 0;
}

 

  • Obrigado 1
Postado

@devair1010 @AdrianoSiqueira

Ambos me ajudaram, muito obrigado, se puderem me ajudar com mais um exercício no qual encontrei dificuldade também, agradeço, é bem semelhante à esse inclusive.

www.clubedohardware.com.br/forums/topic/1369139-calcular-média-com-valores-não-negativos-entre-0-e-10-em-c/

Ps: bem interessante isso de mudar a cor da fonte na compilação, não tinha visto antes.

  • Obrigado 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...