【发布时间】:2017-04-09 23:36:02
【问题描述】:
好的,所以我正在尝试做一个艺术画廊管理程序(有点),当将值插入到结构中时,程序崩溃了。任何人都可以发现错误/错误的编码?
这是我的代码(对不起,变量名是葡萄牙语): 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);
}
【问题讨论】:
-
你为什么使用
char数组而不是std::string,以及printf和scanf而不是std::cout和std::cin?您对scanf的错误使用是第一个问题。 -
我怎样才能使用 std::cin 并且仍然使用指针发送输入?
标签: c++ function pointers struct