Ir para conteúdo
Fórum Script Brasil
  • 0

arquivo.exe parou de funcionar


babalu

Pergunta

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;
}

 

Editado por babalu
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 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;
}
 

Link para o comentário
Compartilhar em outros 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;
	}

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...