0
私はアートギャラリー管理プログラム(種類)を作成しようとしており、構造体に値を挿入するとプログラムがクラッシュします。誰でもerros/bad codingを見つけることができますか?ここで 構造体の使用に問題があり、変数に関数を使用して(関数を使用して)埋め込みます。
は私のコードです(すみません変数名はポルトガル語である): 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);
}
なぜ 'std :: string'の代わりに' char'配列、 'std :: cout'や' std :: cin'の代わりに 'printf'と' scanf'を使用していますか?あなたの誤った 'scanf'の使用が最初の問題として飛び出します。 – aschepler
std :: cinを使ってポインタを使って入力を送るにはどうすればいいですか? –