我在字符串值上遇到问题,我在函数"gerarconta"
上生成以下变量的随机数:"cb->cocom[numcontas].senha"
有4个数字作为字符,qazxsw poi和qazxsw poi有3个字符。
问题是第一个的值是保存在其他变量上,例如:
"cb->cocom[numcontas].agencia"
每次我使用printf时都会发生这种情况。
"cb->cocom[numcontas].numconta"
尝试将Contacomum结构的标题更改为:
cb->cocom[numcontas].senha = 1213
cb->cocom[numcontas].agencia = 545
cb->cocom[numcontas].numconta = 187545
并在字符串的末尾包含NULL char,如下所示:
//AEP 30/04/2019
//Algoritmo para um sistema bancário
//Created by Jordão Qualho da silva
//.
//Last Update 16/04/2019 21:37
//------------------------------------------------------------------------------
//Bibliotecas
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <windows.h>
#include <locale.h>
#include <math.h>
#include <conio.h>
//------------------------------------------------------------------------------
int num=0; //numero de pessoas inseridas
int numcontas=0; //numero de contas inseridas
int tipoconta=-1; //-1=inicio 0=comum 1=especial 2=poupanca
//------------------------------------------------------------------------------
void gotoxy(int x, int y){
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),(COORD){x-1,y-1});
//muda o cursor para a posição x,y
}
//------------------------------------------------------------------------------
void fazerjanela (int ci,int li,int lf,int cf){
//faz uma janela c=coluna l=linha i=incial f=final
int i,y;
for ( i = ci+1; i < cf; i++) {
gotoxy(i,ci);printf("%c",196 );
}
for ( i = ci+1; i < cf; i++) {
gotoxy(i,lf);printf("%c",196 );
}
for ( i = li; i < lf; i++) {
gotoxy(ci,i);printf("%c",179 );
}
for ( i = li; i < lf; i++) {
gotoxy(cf,i);printf("%c",179 );
}
gotoxy(ci,li);printf("%c",218 );
gotoxy(cf,lf);printf("%c",217 );
gotoxy(cf,li);printf("%c", 191);
gotoxy(ci,lf);printf("%c", 192);
gotoxy(cf,lf+1);printf("\n");
}
//------------------------------------------------------------------------------
typedef struct Pessoa{
char nome [100];
char endereco [100];
char telefone [12];
float renda;
int tipopessoa; //1=fisica e 2=Juridica
char cpf [20],cnpj [20];
}pe;
typedef struct Historico{
char numconta [10];//verificar depois
char data [8];
char tipodoc [20];
float valor;
}hist;
typedef struct Contacomum{
char senha [4];
char numconta [3];
char agencia [3];
float saldo;
hist historicos [100];
pe pessoas [100];
int pessoa;
}cc;
typedef struct Contaespecial{
char senha [50];
char numconta [10];
char agencia [10];
float saldo;
hist historicos [100];
pe pessoas [100];
int pessoa;
float limite;
}ce;
typedef struct contapoupanca{
char senha [50];
char numconta [10];
char agencia [10];
float saldo;
hist historicos [100];
pe pessoas [100];
int pessoa;
}cp;
typedef struct contabancaria{
cp copou [20];
ce coesp [20];
cc cocom [20];
}cb;
//------------------------------------------------------------------------------
void gerarconta (cb *cb){
int i=0;
//semente para o numero randomico com o tempo do sistema atual
srand((unsigned)time(NULL));
FILE *arq;
arq = fopen("Contas.txt","w");
if (tipoconta==0) {
//gerando senha de 4 digitos aleatoria
for ( i = 0; i < 4; i++) {
cb->cocom[numcontas].senha[i]=48+(rand()%10);
}gotoxy (5,5); printf("%s",cb->cocom[numcontas].senha);
for ( i = 0; i < 3; i++) {
cb->cocom[numcontas].agencia[i]=48+(rand()%10);
}gotoxy (5,6); printf("%s",cb->cocom[numcontas].agencia);
for ( i = 0; i < 3; i++) {
cb->cocom[numcontas].numconta[i]=48+(rand()%10);
}gotoxy (5,7); printf("%s",cb->cocom[numcontas].numconta);
gotoxy (20,5); printf("%s",cb->cocom[numcontas].senha);
gotoxy (20,6); printf("%s",cb->cocom[numcontas].agencia);
gotoxy (20,7); printf("%s",cb->cocom[numcontas].numconta);
getch();
/*fprintf(arq,"%s %s %s",
cb->cocom[numcontas].senha,
cb->cocom[numcontas].agencia,
cb->cocom[numcontas].numconta);fclose (arq);*/
}
if (tipoconta==1) {
for ( i = 0; i < 4; i++) {
cb->coesp[numcontas].senha[i]=rand()%10;
}
for ( i = 0; i < 3; i++) {
cb->coesp[numcontas].agencia[i]=rand()%10;
}
for ( i = 0; i < 3; i++) {
cb->coesp[numcontas].numconta[i]=rand()%10;
}
}
if (tipoconta==2) {
for ( i = 0; i < 4; i++) {
cb->copou[numcontas].senha[i]=rand()%10;
}
for ( i = 0; i < 3; i++) {
cb->copou[numcontas].agencia[i]=rand()%10;
}
for ( i = 0; i < 3; i++) {
cb->copou[numcontas].numconta[i]=rand()%10;
}
}
}
//------------------------------------------------------------------------------
void transformarnome (char *nome){
int i,tam;
tam = strlen (nome);
for (i = 0; i < tam; i++) {
if (nome [i] == '.') {
nome[i]=' ';
}
}
}
//------------------------------------------------------------------------------
void transformarnomevolta (char *nome){
int i,tam;
tam = strlen (nome);
for (i = 0; i < tam; i++) {
if (nome [i] == ' ') {
nome[i]='.';
}
}
}
//------------------------------------------------------------------------------
void transformarCPF (char *cpf){
int i,tam;
cpf[13]=cpf[10];cpf[12]=cpf[9];cpf[11]='-';
cpf[10]=cpf[8]; cpf[9]=cpf[7]; cpf[8]=cpf[6];cpf[7]='.';
cpf[6]=cpf[5]; cpf[5]=cpf[4]; cpf[4]=cpf[3];cpf[3]='.';
}
//------------------------------------------------------------------------------
void criarpessoafisica (cb *cb){
int tam, flag=0;
FILE *arq; int i=0;
arq = fopen("Pessoas.txt","a");
cb->cocom[numcontas].pessoas[num].tipopessoa = 1;
system("cls"); fazerjanela(1,1,15,50);
gotoxy (15,2); printf("Cadastro de Pessoa Fisica");
gotoxy (3,4); printf("Pesssoa N00%i ", num+1);
gotoxy (3,6); printf("Nome: ");fflush (stdin);
scanf("%[^\n]s", &cb->cocom[numcontas].pessoas[num].nome);
gotoxy (3,7); printf("Endereco: ");fflush (stdin);
scanf("%[^\n]s", &cb->cocom[numcontas].pessoas[num].endereco );
gotoxy (3,8); printf("Telefone: ");fflush (stdin);
scanf("%[^\n]s", &cb->cocom[numcontas].pessoas[num].telefone );
gotoxy (3,9); printf("Renda Mensal: ");fflush (stdin);
scanf("%f", &cb->cocom[numcontas].pessoas[num].renda );
do {
gotoxy (3,12); printf(" ");
gotoxy (3,14); printf(" ");
gotoxy (3,10); printf(" ");
gotoxy (3,10); printf("CPF: ");fflush (stdin);
scanf("%[^\n]s", &cb->cocom[numcontas].pessoas[num].cpf );
tam = strlen (cb->cocom[numcontas].pessoas[num].cpf);
if (tam != 11) {
gotoxy (3,12); printf("Error 404: CPF Invalido !");
gotoxy (3,14); system ("PAUSE");
flag=1;
}else{
flag=0;
}
} while(flag);
gotoxy (3,12); printf("Pessoa cadastrada com sucesso !");
gotoxy (3,14); system("PAUSE"); system ("cls");
transformarnomevolta (&cb->cocom[numcontas].pessoas[num].nome);
transformarnomevolta (&cb->cocom[numcontas].pessoas[num].endereco);
transformarCPF(&cb->cocom[numcontas].pessoas[num].cpf );
fprintf(arq,"\n%s %s %s %.1f %s %i",
cb->cocom[numcontas].pessoas[num].nome,
cb->cocom[numcontas].pessoas[num].endereco,
cb->cocom[numcontas].pessoas[num].telefone,
cb->cocom[numcontas].pessoas[num].renda,
cb->cocom[numcontas].pessoas[num].cpf,
cb->cocom[numcontas].pessoas[num].tipopessoa);
fclose (arq);
}
//------------------------------------------------------------------------------
void criarpessoajuridica (cb *cb) {
int tam, flag=0;
FILE *arq; int i=0;
arq = fopen("Pessoas.txt","a");
cb->cocom[numcontas].pessoas[num].tipopessoa = 2;
system("cls"); fazerjanela(1,1,15,50);
gotoxy (15,2); printf("Cadastro de Pessoa Juridica");
gotoxy (3,4); printf("Pesssoa N000%i ", num+1);
gotoxy (3,6); printf("Nome: ");fflush (stdin);
scanf("%[^\n]s", &cb->cocom[numcontas].pessoas[num].nome);
gotoxy (3,7); printf("Endereco: ");fflush (stdin);
scanf("%[^\n]s", &cb->cocom[numcontas].pessoas[num].endereco );
gotoxy (3,8); printf("Telefone: ");fflush (stdin);
scanf("%[^\n]s", &cb->cocom[numcontas].pessoas[num].telefone );
gotoxy (3,9); printf("Renda Mensal: ");fflush (stdin);
scanf("%f", &cb->cocom[numcontas].pessoas[num].renda );
gotoxy (3,10); printf("CNPJ: ");fflush (stdin);
scanf("%%[^\n]s", &cb->cocom[numcontas].pessoas[num].cnpj );
gotoxy (3,12); printf("Pessoa cadastrada com sucesso !");
gotoxy (3,14); system("PAUSE"); system ("cls");
fprintf(arq,"%s %s %s %f %s",
cb->cocom[numcontas].pessoas[num].nome,
cb->cocom[numcontas].pessoas[num].endereco,
cb->cocom[numcontas].pessoas[num].telefone,
cb->cocom[numcontas].pessoas[num].renda,
cb->cocom[numcontas].pessoas[num].cnpj,
cb->cocom[numcontas].pessoas[num].tipopessoa);
num++;
}
//------------------------------------------------------------------------------
void cadastrarpessoa (cb *cb){
int pos1=1;
char opc;
do{
system("cls"); fazerjanela (1,1,15,50);
gotoxy (6,5); printf("Que tipo de pessoa deseja cadastrar ?");
gotoxy (6,8); printf(" Pessoa Fisica");
gotoxy (25,8); printf(" Pessoa Juridica");
gotoxy (40,14);printf(" Voltar");
switch (pos1){
case 1: gotoxy(6,8); printf("-> Pessoa Fisica");break;
case 2: gotoxy(25,8); printf("-> Pessoa Juridica");break;
case 3: gotoxy(40,14); printf("-> Voltar");break;
}
opc=getch();
if (opc==-32){ //tecla especial necessita pegar segundo valor
opc=getch();
switch (opc) {
case 75:pos1--; break; //SETA PRA CIMA
case 77:pos1++; break; //SETA PRA BAIXO
}
}
if (pos1==0) pos1=3;
if (pos1==4) pos1=1;
if (opc == 13) //ENTER
switch (pos1){
case 1:
criarpessoafisica (&cb);
opc=27;
break;
case 2:
criarpessoajuridica (&cb);
opc=27;
break;
case 3:
opc=27;
break;
}
}
while (opc!=27);
}
//------------------------------------------------------------------------------
void criarcontacomum(cb *cb){
int pos1=1;
char opc;
tipoconta = 0;
do{
system ("cls"); fazerjanela(1,1,15,50);
gotoxy (2,4); printf("-----------------(Conta Comum)------------------");
gotoxy (5,7); printf(" Cadastrar Nova Pessoa ");
gotoxy (5,9); printf(" Usar Pessoa Existente ");
gotoxy (2,12); printf("------------------------------------------------");
gotoxy (42,14); printf(" Sair");
switch (pos1){
case 1: gotoxy(5,7); printf("-> Cadastrar Nova Pessoa "); break;
case 2: gotoxy(5,9); printf("-> Usar Pessoa Existente "); break;
case 3: gotoxy(42,14);printf("-> Sair"); break;
}
opc=getch();
if (opc==-32){ //tecla especial necessita pegar segundo valor
opc=getch();
switch (opc) {
case 72:pos1--; break; //SETA PRA CIMA
case 80:pos1++; break; //SETA PRA BAIXO
}
}
if (pos1==0) pos1=3;
if (pos1==4) pos1=1;
if (opc == 13) //ENTER
switch (pos1){
case 1:
cadastrarpessoa (&cb);
gerarconta (&cb);
num++; numcontas ++;
break;
case 2:
break;
case 3:
opc=27;
break;
}
}
while (opc!=27);
}
//------------------------------------------------------------------------------
void criarcontaespecial(cb *cb){
}
//------------------------------------------------------------------------------
void criarcontapoupanca(cb *cb){
}
//------------------------------------------------------------------------------
void criarconta(cb *cb) {
int pos1=1;
char opc ;
do{
system ("cls"); fazerjanela(1,1,15,50);
gotoxy (2,4); printf("--------------------(Conta)---------------------");
gotoxy (5,6); printf(" Conta Comum ");
gotoxy (5,8); printf(" Conta Especial ");
gotoxy (5,10); printf(" Conta Poupanca ");
gotoxy (2,12); printf("------------------------------------------------");
gotoxy (42,14); printf(" Sair");
switch (pos1){
case 1: gotoxy(5,6); printf("-> Conta Comum"); break;
case 2: gotoxy(5,8); printf("-> Conta Especial"); break;
case 3: gotoxy(5,10); printf("-> Conta Poupanca" ); break;
case 4: gotoxy(42,14);printf("-> Sair"); break;
}
opc=getch();
if (opc==-32){ //tecla especial necessita pegar segundo valor
opc=getch();
switch (opc) {
case 72:pos1--; break; //SETA PRA CIMA
case 80:pos1++; break; //SETA PRA BAIXO
}
}
if (pos1==0) pos1=4;
if (pos1==5) pos1=1;
if (opc == 13) //ENTER
switch (pos1){
case 1:
criarcontacomum (&cb);
break;
case 2:
criarcontaespecial (&cb);
break;
case 3:
criarcontapoupanca (&cb);
case 4:
opc=27;
break;
}
}
while (opc!=27);
}
//------------------------------------------------------------------------------
void acessarconta(cb *cb){
}
//------------------------------------------------------------------------------
/*void lerarquivo (cb *cb){
FILE *arq; int i=0;
arq = fopen("Pessoas.txt","r");
system ("cls");
while ( !feof(arq)) {
fscanf(arq,"%s" "%s" "%f" "%s",&cb->contacomum[0]->pessoas[i].nome,&cb->contacomum[0]->pessoas[i].endereco,&cb->contacomum[0]->pessoas[i].renda,&cb->contacomum[0]->pessoas[i].cpf);
transformarnome (&cb->contacomum[0]->pessoas[i].nome);
transformarnome (&cb->contacomum[0]->pessoas[i].endereco);
i++;num++;
}
}*/
//------------------------------------------------------------------------------
/*void procurarpessoa (cb *cb){
int opcao,i,col=5;
if (num > 0) {
system ("cls");
fazerjanela(1,1,15,50);
gotoxy (13,2); printf("Pessoas Inseridas: %i", num-1);
for ( i = 0; i < num; i++) {
gotoxy (3,(i+4)); printf("%i. %s",(i+1),cb->pessoas[i].nome);
}
gotoxy (3,(i+5)); printf("Insira o numero da pessoa que desja editar: " );
fflush (stdin);scanf("%i", &opcao);
system ("cls");
fazerjanela(1,1,12,50);
opcao=opcao-1;
gotoxy (16,3); printf("Pesssoa Fisica N00%i ", opcao+1);
gotoxy (3,6); printf(" Nome: %s", cb->pessoas[opcao].nome);
gotoxy (3,7); printf("Endereco: %s", cb->pessoas[opcao].endereco );
gotoxy (3,8); printf(" Renda: %.1f", cb->pessoas[opcao].renda );
gotoxy (3,9); printf(" CPF: %s", cb->pessoas[opcao].cpf );
gotoxy (3,11); system ("PAUSE");
}
}*/
//------------------------------------------------------------------------------
int main() {
system("mode con:cols=50 lines=17");
cb contabancaria;
int pos1=1;
char opc;
//lerarquivo (&contabancaria); //arumar <<<<<<<<<<<<<<<<<<<<<<<<<<<<<------
do{
system("cls"); fazerjanela (1,1,15,50);
gotoxy (2,4); printf("--------------------(Conta)---------------------");
gotoxy (5,8); printf(" Criar ");
gotoxy (31,8); printf(" Acessar ");
gotoxy (2,12); printf("------------------------------------------------");
gotoxy (42,14); printf(" Sair");
switch (pos1){
case 1: gotoxy(5,8); printf("-> Criar"); break;
case 2: gotoxy(31,8); printf("-> Acessar"); break;
case 3: gotoxy(42,14);printf("-> Sair"); break;
}
opc=getch();
if (opc==-32){ //tecla especial necessita pegar segundo valor
opc=getch();
switch (opc) {
case 75:pos1--; break; //SETA PRA ESQUERDA
case 77:pos1++; break; //SETA PRA DIREITA
}
}
if (pos1==0) pos1=3;
if (pos1==4) pos1=1;
if (opc == 13) //ENTER
switch (pos1){
case 1:
criarconta(&contabancaria);
break;
case 2:
acessarconta(&contabancaria);
break;
case 3:
opc=27;
break;
}
}
while (opc!=27);
system("cls");
printf("\nPrograma Finalizado com suscesso !\n");
}
所有三个:typedef struct Contacomum{
char senha [5];
char numconta [4];
char agencia [4];
...
}
,...
for ( i = 0; i < 3; i++) {
cb->cocom[numcontas].numconta[i]=48+(rand()%10);
}
cb->cocom[numcontas].numconta[i + 1] = '\0';
...
和senha
。这将形成一个适当的NULL-trminated字符串。