2
My C code gives a crash displaying following po error:
filename.exe has stopped working
I don’t know how to fix it. Follow the code I’ve already made:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct no{
int id;
char* nomeCompleto;
char* apelido;
char* partido;
char* cargo;
float valorPropina;
int qtdVezes;
//Partido* partido;
struct no* esq;
struct no* dir;
}No;
No* criarNo(int id, char* nomeCompleto, char* apelido, char* cargo, float valor, int qtdDeVezes){
No* no = (No*)malloc(sizeof(No));
/*
printf("id: ");
scanf("%d", no->id);
printf("Nome do politico: ");
gets(no->nomeCompleto);
printf("Apelido do politico: ");
gets(no->apelido);
printf("Cargo do politico: ");
gets(no->cargo);
printf("Valor da propina: ");
scanf("%d", no->valorPropina);
printf("qtd: ");
scanf("%d", no->qtdVezes); */
strcpy(no->nomeCompleto, nomeCompleto);
strcpy(no->apelido,apelido);
//p->partido = partido;
strcpy(no->cargo,cargo);
no->valorPropina = valor;
no->qtdVezes = qtdDeVezes;
no->id = id;
no->esq = NULL;
no->dir = NULL;
return no;
}
No* inserirPolitico(No* raiz, int id, char* nomeCompleto, char* apelido, char* cargo, float valor, int qtdDeVezes){
No* novo = criarNo(id, nomeCompleto, apelido, cargo, valor, qtdDeVezes);
if(raiz == NULL) return novo;
No* no = raiz;
No* pai = NULL;
while(no != NULL){
pai = no;
if(novo->id < no->id) no = no->esq;
else no = no->dir;
}
if(pai->id > novo->id) pai->esq = novo;
else pai->dir = novo;
return raiz;
}
/*
void salvarArquivo(No* no){
salvarArquivo(no->esq);
FILE* file;
file = fopen("ed.txt", "w");
salvaItem(no, file);
fclose(file);
salvarArquivo(no->dir);
}
void salvaItem (No* p, FILE *file){
if(p->esq)salvaItem(p->esq,file);
fprintf(file, "%d %s %s %s %d %d\n", p->id, p->nomeCompleto, p->apelido, p->cargo, p->valorPropina, p->qtdVezes);
if(p->dir)salvaItem(p->dir,file);
}
*/
void imprimirOrdem(No* raiz){
if(raiz != NULL){
imprimirOrdem(raiz->esq);
FILE* file;
file = fopen("ed.txt", "w");
//printf("%d - ", raiz->chave);
fprintf(file, "%d %s %s %s %2f %d\n", raiz->id, raiz->nomeCompleto, raiz->apelido, raiz->cargo, raiz->valorPropina, raiz->qtdVezes);
fclose(file);
imprimirOrdem(raiz->dir);
}
}
int main(){
No* no = (No*) malloc(sizeof(No));
no->nomeCompleto = malloc(sizeof(char));
no->apelido = malloc(sizeof(char));
no->cargo = malloc(sizeof(char));
/*
printf("id: ");
scanf("%d", no->id);
printf("Nome do politico: ");
gets(no->nomeCompleto);
// scanf("s", no->nomeCompleto);
printf("Apelido do politico: ");
gets(no->apelido);
//scanf("s", no->apelido);
printf("Cargo do politico: ");
gets(no->cargo);
//scanf("s", no->cargo);
printf("Valor da propina: ");
scanf("%d", no->valorPropina);
printf("qtd: ");
scanf("%d", no->qtdVezes);
inserirPolitico(no, no);
imprimirOrdem(no);
*/
no->nomeCompleto = "sSASs";
no->apelido = "scscscs";
no->cargo ="ddd";
no->id = 1;
no->valorPropina = 22.0;
no->qtdVezes =2;
inserirPolitico(no, no->id, no->nomeCompleto, no->apelido, no->cargo, no->valorPropina, no->qtdVezes );
imprimirOrdem(no);
return 0;
}
You can debug the program to see on which line it gives the error?
– Rodrigo Tognin
Put some
printf()
in the code and find out which line gives the error if you do not know debug kk, but find it there for us! Ah, and describe better what you are trying to do.– Christian Felipe
Breno, welcome to Soft. Go to Ajuda and take the Tour. Edit your question by asking a "clear and objective" question, and if you have an error message in this case, putting it will help....
– Leo
Because any structure that defines the data of a politician, must always have the field
valorPropina
. :D– Victor Stafusa
Here I put the problem more clearly. http://answall.com/questions/139877/problemas-com%C3%81rvore-bin%C3%A1ria-de-search-em-c
– Breno Castelo Branco