Debug: “Uma violação de Acesso (Falta de Segmentação) ocorreu em seu programa.”
Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define CLI 5
#define CON 10
int id = 0; // (fixo) ..cadastro
struct cliente {
char nome[50];
char nomes[5][15]; // nomes dinvididos ..strdiv
int idade;
char sr[4]; // tratamento ..cadastro
} cl[CLI];
struct conta {
long int acesso[3]; // 1 conta. 2 senha. 3 n de contas.
double saldo;
} ct[CON];
// funções
void strdiv() { // reparte cada nome
int cont = 0, qn = 0, ch;
for (ch = 0; ch < 80; ch++) {
if (cl[id].nome[ch] != ' ') {
cl[id].nomes[qn][cont] = cl[id].nome[ch];
cont++;
}
else if (cl[id].nome[ch] == ' ') {
cl[id].nomes[qn][cont] = '\0';
cont = 0;
qn++;
}
else { break; }
}
}
void Cadastro() {
int resp, acc;
printf("\n=== Cadastrar === \n");
printf("Nome: ");
fflush(stdin); // sem isso, o programa passaria direto do fetos abaixo, e pediria somente a idade
fgets(cl[id].nome, 49, stdin); // tentei o gets e depois li que dava problema em usa-lo, porém o problema persiste mesmo com fgets
strdiv();
do {
printf("Idade (+18): ");
scanf("%i", &cl[id].idade);
} while (cl[id].idade < 18 || cl[id].idade > 150);
printf("\nSexo: \n1 - Masculino \n2 - Feminino \n");
do {
printf(">>> ");
scanf("%i", &resp);
} while (resp < 1 || resp > 2);
if (resp == 1) {
strcpy(cl[id].sr, "Sr.");
}
else {
strcpy(cl[id].sr, "Sra.");
}
acc = id * 2;
printf("\n...Cadastro completo... \n\n=== Criar conta === \n");
Conta:
printf("Conta (6 digitos): ");
scanf("%li", ct[acc].acesso[0]); // o erro aparece qnt se entra com a conta, o programa simplesmente para de funcionar
if (ct[acc].acesso[0] < 100000 || ct[acc].acesso[0] > 999999) goto Conta; // a conta deve ter 6 dígitos
Senha:
printf("Senha (6 digitos): ");
scanf("%li", ct[acc].acesso[1]);
if (ct[acc].acesso[1] < 100000 || ct[acc].acesso[1] > 999999) goto Senha; // a senha Tbm
ct[id].saldo = 0;
ct[acc].acesso[2] = 0;
}
(claro que isto é apenas uma parte do programa, coloquei apenas até onde dava o problema)
Onde errei?
