Ir ao conteúdo
  • Cadastre-se
Yago Henrique Rebello

C DEV C++ arquivo.exe parou de funcionar

Recommended Posts

Pessoal Estou fazendo um trabalho e quando vou rodar ele só vai ate a parte de cadastrar e depois fala que o arquivo parou de funcionar .

Alguém por favor me ajuda !!!

Preciso disso pra amanha de manha, desde já agradeço 

 

 

 

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

#define N 3


int Le_Vetores(char cnpj[N][19],char atividade[N][13], int consumo[N]){
	int num = 0;
	
	do{
	
	num++;
	
	printf("Digite o cnpj: ");
	fflush(stdin);
	gets(cnpj[num]);

	
	printf("Digite a atividade economica:");
	printf("\n Agronegocio \n Industria \n Tecnologia \n Comercio \n ");
	fflush(stdin);
	gets(atividade[num]);

	
	printf("Consumo de rede de dados (GB): \n");
	scanf("%d",&consumo[num]);

		
	}while(num != N);
	
	return num;
}
char Consumo_Superior_500(char cnpj[N][19],char atividade[N][13], int consumo[N],int num){
	char cnpj_500[N][19];
	int *cont = 0, i = 0;
	
	
	do{
	if(strcmpi(atividade[i],"agronegocio")==0 && consumo[i]>500){
	
	cnpj_500[i][19] = cnpj[i][19];
	
	(*cont)++;

	}
		i++;	
	}while(i != num);
	
	return cnpj_500[N][19];
}

void Maior_Menor_Consumo(int consumo[N], int num,int *pos_maior,int *pos_menor) {
	int i;
	
	for(i = 0; i<num; i++){
			if (consumo[i] < consumo[*pos_maior]){	
			*pos_maior=i;
			}
			if (consumo[i] > consumo[*pos_menor]){
			*pos_menor=i;
			}
	}
}
void Exibe_cnpj(char cnpj_500[N][19], int cont){
	
	printf("clientes com consumo superior a 500: \n");
	int i;
	for(i=0;i<cont;i++)
	{
		
	}
	
}

int main(){
	char cnpj[N][19];
	char atividade[N][13]; 
	char cnpj_500[N][19];
	int num;
	int cont;
	int consumo[N];
	int pos_maior;
	int pos_menor;
	
	num=Le_Vetores(cnpj,atividade,consumo);
	
	cnpj_500[N][19] = Consumo_Superior_500(cnpj,atividade,consumo,num);

	Maior_Menor_Consumo(consumo,num,&pos_maior,&pos_menor);

	printf("Maior consumo: %d", pos_maior);
	printf("Menor consumo: %d", pos_menor);	

	Exibe_cnpj(cnpj_500, cont);
	
	
}

Pessoal Estou fazendo um trabalho e quando vou rodar ele só vai ate a parte de cadastrar e depois fala que o arquivo parou de funcionar .

Alguém por favor me ajuda !!!

Preciso disso pra amanha de manha, desde já agradeço 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Yago Henrique Rebello    para postar seu código é melhor usar o botão  <>   que está lá na barra de ferramentas da janela de responder pois senão seu código fica faltando alguns caracteres como os [ i ]  que sumiram do seu código , e ele está dando erro por que você esqueceu de colocar as posições dos vetores na hora de comparar ,  lá na função consumo_maior_500 , então seu código com algumas modificações ficaria assim :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#define N 3
using namespace std;
int Le_Vetores(char cnpj[N][19],char atividade[N][13], int consumo[N]){
    int num = 0;
    do{
        printf("Digite o cnpj: ");
        fflush(stdin);
        gets(cnpj[num]);
        printf("Digite a atividade economica:");
        printf("\n Agronegocio \n Industria \n Tecnologia \n Comercio \n ");
        fflush(stdin);
        gets(atividade[num]);
        printf("Consumo de rede de dados (GB): \n");
        scanf("%d",&consumo[num]);
        num++;
    }while(num != N);
    return num;
}
char Consumo_Superior_500(char cnpj[N][19],char atividade[N][13], int consumo[N],int num){
    char cnpj_500[N][19];
    int *cont = 0, i = 0;
    do{
        if(atividade[i]=="agronegocio"){
            cnpj_500[i][19] = cnpj[i][19];
            (*cont)++;
        }
        i++;
    }while(i != num);
    return cnpj_500[N][19];
}
void Maior_Menor_Consumo(int consumo[N], int num,int *pos_maior,int *pos_menor) {
    int i;
    for(i = 0; i<num; i++){
            if (consumo[i] < consumo[*pos_maior]){
            *pos_maior=i;
            }
            if (consumo[i] > consumo[*pos_menor]){
            *pos_menor=i;
            }
    }
}
void Exibe_cnpj(char cnpj_500[N][19], int cont){
    printf("clientes com consumo superior a 500: \n");
    int i;
    for(i=0;i<cont;i++)
    {

    }
}
int main(){
    char cnpj[N][19];
    char atividade[N][13];
    char cnpj_500[N][19];
    int num;
    int cont;
    int consumo[N];
    int pos_maior;
    int pos_menor;
    num=Le_Vetores(cnpj,atividade,consumo);
    cnpj_500[N][19] = Consumo_Superior_500(cnpj,atividade,consumo,num);
    Maior_Menor_Consumo(consumo,num,&pos_maior,&pos_menor);
    printf("Maior consumo: %d\n", pos_maior);
    printf("Menor consumo: %d\n", pos_menor);
    Exibe_cnpj(cnpj_500, cont);
    system("pause");
    return 0;
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu código apresenta diversos problemas. Os mais fáceis de corrigir:

  • uso de `fflush(stdin)`: usar `fflush` em um `stdin` é comportamento indefinido.
  • uso de `gets()`: função extremamente perigosa. Qualquer compilador decente manda um aviso crítico ao usá-la. Pode substituí-la pela `scanf()`, a qual não é nenhuma maravilha, mas é muito melhor.
  • Há um ponteiro `cont` apontando para números, que não são endereços válidos de memória. Nesse mesmo trecho de código, a função deveria retornar caractere mas está retornando algo que não deveria, já que cnpj é um ponteiro para ponteiro de caracteres.


 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
12 minutos atrás, devair1010 disse:

@Yago Henrique Rebello    para postar seu código é melhor usar o botão  <>   que está lá na barra de ferramentas da janela de responder pois senão seu código fica faltando alguns caracteres como os [ i ]  que sumiram do seu código , e ele está dando erro por que você esqueceu de colocar as posições dos vetores na hora de comparar ,  lá na função consumo_maior_500 , então seu código com algumas modificações ficaria assim :


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 3
using namespace std;
int Le_Vetores(char cnpj[N][19],char atividade[N][13], int consumo[N]){
    int num = 0;
    do{
        printf("Digite o cnpj: ");
        fflush(stdin);
        gets(cnpj[num]);
        printf("Digite a atividade economica:");
        printf("\n Agronegocio \n Industria \n Tecnologia \n Comercio \n ");
        fflush(stdin);
        gets(atividade[num]);
        printf("Consumo de rede de dados (GB): \n");
        scanf("%d",&consumo[num]);
        num++;
    }while(num != N);
    return num;
}
char Consumo_Superior_500(char cnpj[N][19],char atividade[N][13], int consumo[N],int num){
    char cnpj_500[N][19];
    int *cont = 0, i = 0;
    do{
        if(atividade[i]=="agronegocio"){
            cnpj_500[i][19] = cnpj[i][19];
            (*cont)++;
        }
        i++;
    }while(i != num);
    return cnpj_500[N][19];
}
void Maior_Menor_Consumo(int consumo[N], int num,int *pos_maior,int *pos_menor) {
    int i;
    for(i = 0; i<num; i++){
            if (consumo[i] < consumo[*pos_maior]){
            *pos_maior=i;
            }
            if (consumo[i] > consumo[*pos_menor]){
            *pos_menor=i;
            }
    }
}
void Exibe_cnpj(char cnpj_500[N][19], int cont){
    printf("clientes com consumo superior a 500: \n");
    int i;
    for(i=0;i<cont;i++)
    {

    }
}
int main(){
    char cnpj[N][19];
    char atividade[N][13];
    char cnpj_500[N][19];
    int num;
    int cont;
    int consumo[N];
    int pos_maior;
    int pos_menor;
    num=Le_Vetores(cnpj,atividade,consumo);
    cnpj_500[N][19] = Consumo_Superior_500(cnpj,atividade,consumo,num);
    Maior_Menor_Consumo(consumo,num,&pos_maior,&pos_menor);
    printf("Maior consumo: %d\n", pos_maior);
    printf("Menor consumo: %d\n", pos_menor);
    Exibe_cnpj(cnpj_500, cont);
    system("pause");
    return 0;
}

 

Amigo quando coloco o código que você mandou no dev c++ ele não reconhece using namespace std e quando eu tiro e rodo ele continua dando o mesmo problema 

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Yago Henrique Rebello    qual versão do seu dev c++ você está usando ?  por que aqui na versão 4.9.9.2 está rodando normal veja o print dele rodando  :

5b022af8b0580_devc.thumb.png.38b2a348ae75cc7b7a7f5b19f2e4fb40.png

 e ele só faz o cadastro por que o código que você fez só faz isso mesmo  .

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@devair1010 Ele está provavelmente fazendo um programa em C e não em C++.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 minutos atrás, devair1010 disse:

@Yago Henrique Rebello    qual versão do seu dev c++ você está usando ?  por que aqui na versão 4.9.9.2 está rodando normal veja o print dele rodando  :

5b022af8b0580_devc.thumb.png.38b2a348ae75cc7b7a7f5b19f2e4fb40.png

 e ele só faz o cadastro por que o código que você fez só faz isso mesmo  .

O meu é a versão 5.11 e o programa teria que exibir os clientes com consumo superior a 500 e é nessa parte que ele trava 

adicionado 1 minuto depois
3 minutos atrás, Davi Silva Santos disse:

@devair1010 Ele está provavelmente fazendo um programa em C e não em C++.

Isso é em C

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você colocou um loop infinito no Exibe_cnpj. E o @devair1010 consertou vários erros do seu código.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Yago Henrique Rebello @Yago Henrique Rebello   então seu dev c++ está com uma configuração diferente do normal    ,  experimente outro compilador   como o code blocks da versão 16.01  que é bem melhor do que esse dev c++.  e que com certeza vai funcionar bem  .

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 3
int Le_Vetores(char cnpj[N][19],char atividade[N][13], int consumo[N]){
    int num = 0;
    do{
        printf("Digite o cnpj: ");
        fflush(stdin);
        gets(cnpj[num]);
        printf("Digite a atividade economica:");
        printf("\n Agronegocio \n Industria \n Tecnologia \n Comercio \n ");
        fflush(stdin);
        gets(atividade[num]);
        printf("Consumo de rede de dados (GB): \n");
        scanf("%d",&consumo[num]);
        num++;
    }while(num != N);
    return num;
}
char Consumo_Superior_500(char cnpj[N][19],char atividade[N][13], int consumo[N],int num){
    char cnpj_500[N][19];
    int *cont = 0, i = 0;
    do{
        if(atividade[i]=="agronegocio"){
            cnpj_500[i][19] = cnpj[i][19];
            (*cont)++;
        }
        i++;
    }while(i != num);
    return cnpj_500[N][19];
}
void Maior_Menor_Consumo(int consumo[N], int num,int *pos_maior,int *pos_menor) {
    int i;
    for(i = 0; i<num; i++){
            if (consumo[i] > consumo[*pos_maior]){
            *pos_maior=i;
            }
            if (consumo[i] < consumo[*pos_menor]){
            *pos_menor=i;
            }
    }
}
void Exibe_cnpj(char cnpj_500[N][19], int cont){
    printf("clientes com consumo superior a 500: \n");
    int i;
    for(i=0;i<cont;i++)
    {

    }
}
int main(){
    char cnpj[N][19];
    char atividade[N][13];
    char cnpj_500[N][19];
    int num;
    int cont;
    int consumo[1];
    int pos_maior = 0;
    int pos_menor = 0;
    num=Le_Vetores(cnpj,atividade,consumo);
    cnpj_500[N][19] = Consumo_Superior_500(cnpj,atividade,consumo,num);
    Maior_Menor_Consumo(consumo,num,&pos_maior,&pos_menor);
    printf("Maior consumo: %d\n", pos_maior);
    printf("Menor consumo: %d\n", pos_menor);
    Exibe_cnpj(cnpj_500, cont);
    system("pause");
    return 0;
}

Testa ai esse código. Se der certo depois digo as modificações que eu fiz.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 minutos atrás, Charl disse:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 3
int Le_Vetores(char cnpj[N][19],char atividade[N][13], int consumo[N]){
    int num = 0;
    do{
        printf("Digite o cnpj: ");
        fflush(stdin);
        gets(cnpj[num]);
        printf("Digite a atividade economica:");
        printf("\n Agronegocio \n Industria \n Tecnologia \n Comercio \n ");
        fflush(stdin);
        gets(atividade[num]);
        printf("Consumo de rede de dados (GB): \n");
        scanf("%d",&consumo[num]);
        num++;
    }while(num != N);
    return num;
}
char Consumo_Superior_500(char cnpj[N][19],char atividade[N][13], int consumo[N],int num){
    char cnpj_500[N][19];
    int *cont = 0, i = 0;
    do{
        if(atividade[i]=="agronegocio"){
            cnpj_500[i][19] = cnpj[i][19];
            (*cont)++;
        }
        i++;
    }while(i != num);
    return cnpj_500[N][19];
}
void Maior_Menor_Consumo(int consumo[N], int num,int *pos_maior,int *pos_menor) {
    int i;
    for(i = 0; i<num; i++){
    		printf("\nValor do i %d\n", i);
            if (consumo[i] > consumo[*pos_maior]){
            *pos_maior=i;
            }
            if (consumo[i] < consumo[*pos_menor]){
            *pos_menor=i;
            }
    }
}
void Exibe_cnpj(char cnpj_500[N][19], int cont){
    printf("clientes com consumo superior a 500: \n");
    int i;
    for(i=0;i<cont;i++)
    {

    }
}
int main(){
    char cnpj[N][19];
    char atividade[N][13];
    char cnpj_500[N][19];
    int num;
    int cont;
    int consumo[1];
    int pos_maior = 0;
    int pos_menor = 0;
    num=Le_Vetores(cnpj,atividade,consumo);
    cnpj_500[N][19] = Consumo_Superior_500(cnpj,atividade,consumo,num);
    Maior_Menor_Consumo(consumo,num,&pos_maior,&pos_menor);
    printf("Maior consumo: %d\n", pos_maior);
    printf("Menor consumo: %d\n", pos_menor);
    Exibe_cnpj(cnpj_500, cont);
    system("pause");
    return 0;
}

Testa ai esse código. Se der certo depois digo as modificações que eu fiz.

Foi sim 

O que eu circulei em vermelho ele teria que mostrar quantos clientes tiveram mais que 500 o que não estou conseguindo fazer 

 

e o que foi circulado em laranja eu nao sei o que.

teste2.png

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Foi mal, é que para testar coloquei printf, mas já editei o código sem esse valor do i, é só copiar e colar. A modificação que eu fiz foi iniciar a pos_maior e pos_menor, toda variável antes do primeiro uso deveria ser inicializada. Também inverti o sinal do método Maior_Menor_Consumo.

Para fazer isso dai você tem que fazer um IF comparando se é maior de quê 500 lá no FOR.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 minutos atrás, Charl disse:

Foi mal, é que para testar coloquei printf, mas já editei o código sem esse valor do i, é só copiar e colar. A modificação que eu fiz foi iniciar a pos_maior e pos_menor, toda variável antes do primeiro uso deveria ser inicializada. Também inverti o sinal do método Maior_Menor_Consumo, para fazer isso dai você tem que fazer um IF comparando se é maior de quê 500 lá no FOR.

No for do Exibir_cnpj?

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, lá mesmo.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
7 minutos atrás, Charl disse:

Sim, lá mesmo.


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 2
int Le_Vetores(char cnpj[N][19],char atividade[N][13], int consumo[N]){
    int num = 0;
    do{
        printf("Digite o cnpj: ");
        fflush(stdin);
        gets(cnpj[num]);
        printf("Digite a atividade economica:");
        printf("\n Agronegocio \n Industria \n Tecnologia \n Comercio \n ");
        fflush(stdin);
        gets(atividade[num]);
        printf("Consumo de rede de dados (GB): \n");
        scanf("%d",&consumo[num]);
        num++;
    }while(num != N);
    return num;
}
char Consumo_Superior_500(char cnpj[N][19],char atividade[N][13], int consumo[N],int num){
    char cnpj_500[N][19];
    int *cont = 0, i = 0;
    do{
        if(atividade[i]=="agronegocio"){
            cnpj_500[i][19] = cnpj[i][19];
            (*cont)++;
        }
        i++;
    }while(i != num);
    return cnpj_500[N][19];
}
void Maior_Menor_Consumo(int consumo[N], int num,int *pos_maior,int *pos_menor) {
    int i;
    for(i = 0; i<num; i++){
    		
            if (consumo[i] > consumo[*pos_maior]){
            *pos_maior=i;
            }
            if (consumo[i] < consumo[*pos_menor]){
            *pos_menor=i;
            }
    }
}
void Exibe_cnpj(char cnpj_500[N][19], int cont,char cnpj[N][19],int consumo[N]){
   
    int i;
    for(i=0;i<cont;i++)
    {
 		if(consumo[i]>500){
            cnpj_500[i][19] = cnpj[i][19];
             printf("clientes com consumo superior a 500: \n",cnpj[N][19]);
             cont++;
        }
        i++;
    }
}
int main(){
    char cnpj[N][19];
    char atividade[N][13];
    char cnpj_500[N][19];
    int num;
    int cont;
    int consumo[1];
    int pos_maior = 0;
    int pos_menor = 0;
    num=Le_Vetores(cnpj,atividade,consumo);
    cnpj_500[N][19] = Consumo_Superior_500(cnpj,atividade,consumo,num);
    Maior_Menor_Consumo(consumo,num,&pos_maior,&pos_menor);
    printf("Maior consumo: %d\n", pos_maior);
    printf("Menor consumo: %d\n", pos_menor);
    Exibe_cnpj(cnpj_500, cont,cnpj,consumo);
    system("pause");
    return 0;
}

 

 

Ficaria assim? porque se for mesmo assim nao esta indo

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
11 minutos atrás, Yago Henrique Rebello disse:

cnpj_500[19] = cnpj[19];

Erro aqui que o @devair1010 tinha consertado:

 

1 hora atrás, devair1010 disse:

cnpj_500[i][19] = cnpj[i][19];

Seria bom checar o código do devair1010. Ou copia o último código que eu enviei e tenta fazer as alterações.

 

E em que parte do código você armazena os valores que são maiores que 500? E você concorda que para achar os valores maior e imprimir precisa do IF comparando se é maior do que 500?

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×