Okay so I'm trying to do an art gallery management program (kind of), and when inserting the values into the struct the programm crashes. anyone can spot erros/bad coding?
Here is my code (sorry the variable names are in portuguese): main.cpp
#include <iostream>
#include <cstdlib>
#include <stdio.h>
#include <string>
#include "liga.h"
using namespace std;
bool menu1=false,
menu2=false,
menu3=false;
int opc,opc1;
string key="1qaz2wsx",pass;
int main()
{
OBRAS database;
OBRAS *ptr;
ptr=&database;
do {
printf("\n\t******************** GESTOR ADAO ********************\n");
printf("\t\t -> modo admin - prima 1\n");
printf("\t\t -> modo guest - prima 2\n");
printf("\t\t -> exit - prima 3\n");
cin>>opc;
if (opc<1 || opc>3) printf("\nInseriu uma opcao invalida, tente de novo.\n\n");
if (opc==1) {
do {
cin.sync();
cin.clear();
system("cls");
printf("Insira a password:\n");
cin>>pass;
if (pass!=key) printf("\nPassword incorreta, tente de novo;\n");
} while (key!=pass);
do {
cin.sync();
cin.clear();
system("CLS");
printf("\n\t******************** GESTOR ADAO ********************\n");
printf("\t\t -> inserir obra - prima 1\n");
printf("\t\t -> listar obras - prima 2\n");
printf("\t\t -> voltar - prima 3\n");
cin>>opc1;
if (opc1<1 || opc1>3) printf("\nInseriu uma opcao invalida, tente de novo.\n\n");
if (opc1==3) menu2=true;
if (opc==1) {
cin.sync();
cin.clear();
inserir(ptr);
}
} while(menu2==false);
}
/*else if (opc==2) ->MODO GUEST, sem pass, read only*/
if (opc==3) menu1=true;
} while (menu1==false);
return EXIT_SUCCESS;
}
liga.h
#ifndef LIGA
#define LIGA
#include <iostream>
#include <stdio.h>
#include <cstdlib>
#include <string>
typedef struct obras {
char autor[50];
char nome[50];
int ano;
int price;
}OBRAS;
#include "inserir.h"
//#include "main.cpp"
//AQUI SÃO CHAMADOS OS OUTROS HEADERS
/*#include "inserir.h"
#include "lista.h"*/
#endif
inserir.h
void inserir(OBRAS *ptr) {
std::cin.sync();
std::cin.clear();
system("CLS");
printf("Insira o nome do autor da obra:\n");
scanf("%[50]", ptr->autor);
std::cin.sync();
std::cin.clear();
printf("Insira o nome da obra:\n");
scanf("%[50]",ptr->nome);
std::cin.sync();
std::cin.clear();
printf("Insira o ano em que foi feita a obra:\n");
scanf("%d",ptr->ano);
std::cin.sync();
std::cin.clear();
printf("Insira o preco da obra:\n");
scanf("%d",ptr->price);
}
答案 0 :(得分:0)
与评论中提到的aschepler一样,将所有char
更改为std::string
s,将所有scanf
更改为std::cin
s,如下所示:
typedef struct obras {
std::string autor;
std::string nome;
int ano;
int price;
}OBRAS;
并在你的inserir.h中:
void inserir(OBRAS *ptr) {
std::cin.sync();
std::cin.clear();
system("CLS");
std::cout << "Insira o nome do autor da obra:\n";
std::cin >> ptr->autor;
std::cin.sync();
std::cin.clear();
std::cout << "Insira o nome da obra:\n";
std::cin >> ptr->nome;
std::cin.sync();
std::cin.clear();
std::cout << "Insira o ano em que foi feita a obra:\n";
std::cin >> ptr->ano;
std::cin.sync();
std::cin.clear();
std::cout << "Insira o preco da obra:\n";
std::cin >> ptr->price;
}
在编辑你的帖子时,我(幸运的是)看到一条注释行#include "main.cpp"
。不要这样做,这是非常糟糕的做法。