Salve a tutti,
allora ho scritto questo programmino che simula la gestione di un database. Il problema sorge quando cerco di inserire un nuovo record... Usando la funzione gets(), chiendo in input una stringa di max 20 char. Però quando chiamo la funzione inserisci_record() dal menu', il programma da già per acquisita la stringa nome e chiede solamente la stringa cognome (ho lasciato dei commenti lungo il codice che spiegano vari tentavi che ho fatto per risolvere il problema):
Il programma l'ho scritto prima con Il Dev-C++, poi lo trasportato sul Visual C++. Con entrambi i compilatori il programma si comporta come detto prima. Sono sicuro che il problema stia nelle funzioni di controllo if & switch, visto che il programma scritto così funziona:Codice PHP:#include "stdafx.h" //necessaria per la versione Visual C++
#include <iostream>
#include <cstdio>
using namespace std;
#define MAX 10
struct database {
char nome[20];
char cognome[20];
};
int elements = 0;
database tab[MAX];
char menu(); /*ho provato a restituire un int ma il programma non funziona lo stesso*/
bool database_emply();
bool database_free();
void inserisci_record();
void elimina_record();
void stampa_tab();
void main() {
char scelta;
do {
scelta = menu();
switch(scelta) {
case '0':
exit(-1);
case '1':
inserisci_record();
break;
case '2':
elimina_record();
break;
case '3':
stampa_tab();
break;
}
//if(scelta == '1') inserisci_record(); /*questo è un tentativo di usare al posto dell'istruzione di controllo switch, la funzione if. Il risultato è lo stesso...*/
} while(1);
}
char menu() {
char scelta;
cout << "\n";
cout << " Menu':\n";
cout << "\n";
cout << " 1. Inserisci Record;\n";
cout << " 2. Elimina Record;\n";
cout << " 3. Stampa Database;\n";
cout << " 0. Esci.\n";
cout << "\n";
cout << " Scelta: ";
cin >> scelta;
return scelta;
}
bool database_emply() {
return elements == MAX;
}
bool database_free() {
return elements == 0;
}
void inserisci_record() {
if(database_emply()) {
cout << "\n";
cout << " Database Emply!!\n";
return;
}
cout << "\n";
cout << " Nome: "; gets(tab[elements].nome);
cout << " Cognome: "; gets(tab[elements].cognome);
elements++;
}
void elimina_record() {
if(database_free()) {
cout << "\n";
cout << " Database Free!!\n";
return;
}
elements--;
}
void stampa_tab() {
for(int i = 0; i < elements; i++) {
cout << "\n";
cout << " " << i+1 << ". ";
cout << tab[i].nome << " " << tab[i].cognome;
cout << "\n";
}
}
Codice PHP:#include "stdafx.h"
#include <iostream>
#include <cstdio>
using namespace std;
#define MAX 10
struct database {
char nome[20];
char cognome[20];
};
int elements = 0;
database tab[MAX];
bool database_emply();
bool database_free();
void inserisci_record();
void stampa_tab();
void main() {
inserisci_record();
stampa_tab();
getchar();
}
bool database_emply() {
return elements == MAX;
}
bool database_free() {
return elements == 0;
}
void inserisci_record() {
if(database_emply()) {
cout << "\n";
cout << " Database Emply!!\n";
return;
}
cout << "\n";
cout << " Nome: "; gets(tab[elements].nome);
cout << " Cognome: "; gets(tab[elements].cognome);
elements++;
}
void stampa_tab() {
for(int i = 0; i < elements; i++) {
cout << "\n";
cout << " " << i+1 << ". ";
cout << tab[i].nome << " " << tab[i].cognome;
cout << "\n";
}
}

Rispondi quotando

