• 0
babalu

arquivo.exe parou de funcionar

Question

Olá, sou iniciante em programação e tenho uma atividade para fazer. Uma das questões é sobre notas e médias, logo, pensei em usar vetores. O programa roda normalmente até sair do For. Depois que ele sai, ele quebra nos If e else (PS.: eu coloquei um scanf qualquer antes do if e foi normal).

Obs: utilizo o CodeBlocks.  

Segue abaixo um código que não funciona: 

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

int main()
{

    int opc;
    char opcao;

    do
    {
        printf("+-------------------------------------+\n");
        printf("|>>>>>>>>>>>>>>> MENU <<<<<<<<<<<<<<<<|");
        printf("\n+-------------------------------------+");
        printf("\n| 1 - IMC                             |");
        printf("\n| 2 - Notas                           |");
        printf("\n| 3 - CNH                             |");
        printf("\n| 4 - Operacoes                       |");
        printf("\n| 5 - Media                           |");
        printf("\n+-------------------------------------+");
        printf("\n--> ");
        scanf("%d", &opc);

        switch (opc)
        {
        case 5:

            char nomes[3][256];
            float notas;
            float somas;
            float medias [3];
            int posicao;

            printf("\n+-------------------------------------+\n");
            printf("|                MEDIA                |");
            printf("\n+-------------------------------------+\n");

            for(int i=0; i < 3; i++)
            {
                printf("Informe o nome do %do aluno: ", (i+1));
                nomes[i][256] = scanf("%s", &nomes);

                for(int k=0; k < 3; k++)
                {
                    printf("Informe a nota %d:", (k+1));
                    scanf("%f", &notas);

                    somas = (somas + notas);
                }
                medias[i] = (somas / 3);
                                   
                somas = 0;
            }
                                   
            if (medias[0] > medias[1] && medias[0] > medias[2])
            {
                printf("A maior média pertence à : %s", nomes[0]);
                printf("A média é : %.2f", medias[0]);
            }
            else if (medias[1] > medias[0] && medias[1] > medias[2])
            {
                printf("A maior média pertence a : %s", nomes[1]);
                printf("A media é : %.2f", medias[1]);
            }
            else if (medias[2] > medias[1] && medias[2] > medias[1])
            {
                printf("A maior média pertence à : %s", nomes[2]);
                printf("A média é : %.2f", medias[2]);
            }
            break;

        }
        printf("\nDeseja continuar? (s/n)\n");
        printf("--> ");
        scanf("%s", &opcao);
        printf("\n");

    }
    while(opcao == 's');
    system("pause");
    return 0;
}

 

Edited by babalu

Share this post


Link to post
Share on other sites

2 answers to this question

Recommended Posts

  • 0

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

/*ESPERO QUE TENHA RETIRADO SUAS DUVIDAS 🙂 E QUE ERA ISSO MESMO O RESULTADO QUE ERA ESPERADO POR VOCE*/

/*TUDO QUE FOI ALTERADO ESTA JUNTO COM UM COMENTARIO DO QUE FOI FEITO E OS CARACTERES ESPECIAIS FORAM RETIRADOS  */

/*para utilizar o seu char nomes[3][256] eu utilizei o struct com o nome informaçoes que eu montei para que nomes[3][256] fosse aceito*/
struct informacoes{
    //criou o char nomes[256]
    char nomes[256];
};
/*para utilizar a variavel char nomes eu chamei o dados sendo assim para acessar a variavel nomes eu ecrevo dados[possui 3 espaços, o espaço 0 , 1 e 2].nomes  //
 sendo assim pode-se colocar: dados[0].nomes , dados[1].nomes e dados[2].nomes fazendo com que se possa utilizalo seguindo o raciocinio do seu char nomes[3][256]*/
struct informacoes dados[3];

int main()
{
    /*OBS: não UTILIZE NENHUM TIPO DE ACENTO NOS SEUS PRINTF(""); POIS ACENTUACOES são CARACTERES ESPECIAIS SENDO ASSIM EM VEZ DE SAIR ALGO ACENTUADO COMO VOCE DIGITOU IRA SAIR ALGUM SIMBOLO OU OUTRO CARACTER ESPECIAL*/

    int opc;
    char opcao;

    do
    {
        printf("+-------------------------------------+\n");
        printf("|>>>>>>>>>>>>>>> MENU <<<<<<<<<<<<<<<<|");
        printf("\n+-------------------------------------+");
        printf("\n| 1 - IMC                             |");
        printf("\n| 2 - Notas                           |");
        printf("\n| 3 - CNH                             |");
        printf("\n| 4 - Operacoes                       |");
        printf("\n| 5 - Media                           |");
        printf("\n+-------------------------------------+");
        printf("\n--> ");
        scanf("%d", &opc);

        switch (opc)
        {
            /*apos o case 5: foi aberto chaves com o intuito da estrutura case 5: fique ajeitada e funcional*/
        case 5:
            {


            float notas;
            float somas;
            float medias [3];
            int posicao;

            printf("\n+-------------------------------------+\n");
            printf("|                MEDIA                |");
            printf("\n+-------------------------------------+\n");

            for(int i=0; i < 3; i++)
            {
                printf("Informe o nome do %do aluno: ", (i+1));
                /* fflush(stdin), que serve para limpar o buffer do teclado*/
                fflush(stdin);
                /*para salvar o que o usuario digitar utilizando o scanf no %256 é o numero de espaços da sua variavel nome, depois da virgula e onde se coloca o nome da variavel que se quer salvar sem o & mesmo*/
                scanf("%256[^\n]",dados.nomes);

                for(int k=0; k < 3; k++)
                {
                    printf("Informe a nota %d:", (k+1));
                    scanf("%f", &notas);

                    somas = (somas + notas);
                }
                medias = (somas / 3);

                somas = 0;
            }

            if (medias[0] > medias[1] && medias[0] > medias[2])
            {
                printf("A maior media pertence a : %s", dados[0].nomes);
                printf("\nA média é : %.2f", medias[0]);
            }
            else if (medias[1] > medias[0] && medias[1] > medias[2])
            {
                printf("A maior media pertence a : %s", dados[1].nomes);
                printf("\nA media é : %.2f", medias[1]);
            }
            else if (medias[2] > medias[1] && medias[2] > medias[1])
            {
                printf("A maior media pertence a : %s", dados[2].nomes);
                printf("\nA media e : %.2f", medias[2]);
            }
            break;
        }

        }
        printf("\nDeseja continuar? (s/n)\n");
        printf("--> ");
        scanf("%s", &opcao);
        printf("\n");

    }
    while(opcao == 's');
    system("pause");
    return 0;
}
 

Share this post


Link to post
Share on other sites
  • 0

Declaração de variáveis vem antes das linhas de código + alguns erros bobos. Enfim, o código corrigido:

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

	int main()
	{

	int opc, i, k;
	char opcao;
	char nomes[3][256];
	float notas;
	float somas;
	float medias [3];
	int posicao;

	do
	{
	printf("+-------------------------------------+\n");
	printf("|>>>>>>>>>>>>>>> MENU <<<<<<<<<<<<<<<<|");
	printf("\n+-------------------------------------+");
	printf("\n| 1 - IMC                             |");
	printf("\n| 2 - Notas                           |");
	printf("\n| 3 - CNH                             |");
	printf("\n| 4 - Operacoes                       |");
	printf("\n| 5 - Media                           |");
	printf("\n+-------------------------------------+");
	printf("\n--> ");
	scanf("%d", &opc);

	switch (opc)
	{
	case 5:

	printf("\n+-------------------------------------+\n");
	printf("|                MEDIA                |");
	printf("\n+-------------------------------------+\n");

	for(i=0; i < 3; i++)
	{
			printf("Informe o nome do %do aluno: ", (i+1));
			
			scanf("%s", nomes[i]);
			somas = 0;
			for(k=0; k < 3; k++)
			{
				printf("Informe a nota %d:", (k+1));
				scanf("%f", &notas);

				somas = (somas + notas);
			}
			medias[i] = (somas / 3);				   
		}					   
		if (medias[0] > medias[1] && medias[0] > medias[2])
		{
			printf("A maior média pertence à : %s", nomes[0]);
			printf("A média é : %.2f", medias[0]);
		}
		else if (medias[1] > medias[2])
		{
			printf("A maior média pertence a : %s", nomes[1]);
			printf("A media é : %.2f", medias[1]);
		}
		else
		{
			printf("A maior média pertence à : %s", nomes[2]);
			printf("A média é : %.2f", medias[2]);
		}
	
	}
	printf("\nDeseja continuar? (s/n)\n");
	printf("--> ");
	scanf("%s", &opcao);
	printf("\n");

	}
	while(opcao == 's');
	system("pause");
	return 0;
	}

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.