好的,所以我正在尝试做一个艺术画廊管理程序(有点(,当将值插入结构时,程序崩溃。 任何人都可以发现错误/糟糕的编码吗?
这是我的代码(对不起,变量名称是葡萄牙语(:主.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("nt******************** GESTOR ADAO ********************n");
printf("tt -> modo admin - prima 1n");
printf("tt -> modo guest - prima 2n");
printf("tt -> exit - prima 3n");
cin>>opc;
if (opc<1 || opc>3) printf("nInseriu uma opcao invalida, tente de novo.nn");
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("nt******************** GESTOR ADAO ********************n");
printf("tt -> inserir obra - prima 1n");
printf("tt -> listar obras - prima 2n");
printf("tt -> voltar - prima 3n");
cin>>opc1;
if (opc1<1 || opc1>3) printf("nInseriu uma opcao invalida, tente de novo.nn");
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;
}
西甲
#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
因塞里尔·
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);
}
就像 aschepler 在他的评论中提到的那样,将所有 char
s 更改为 std::string
s,将所有 scanf
s 更改为 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"
.不要那样做,这真的很糟糕。