Ecco il mio problema, posto il codice così avete le idee più chiare...
Dopo aver eseguito l' exe si verifica il seguente problema. Prima di aver immesso un valore compare la scritta :codice:#include <iostream> #include <stdlib.h> using namespace std; float legginumero(); int main(int argc, char *argv[]) { int n; char buffer[100]; //buffer è l'array di caratteri in cui memorizzare l'input. int opzione; cout << " Benvenuto!" << endl; cout << " Prima di accedere al menu, inserisci il numero di vertici del grafo: "; cin.getline(buffer,100);//affinché il valore immesso sia solo e soltanto un intero, utilizzo n=atol(buffer); //la funzione atol che converte un vettore di caratteri in un long cout << endl; //restituendo zero se il vettore che legge non è un numero! Nel caso in //cui si immetta un valore in virgola mobile si prende la parte intera. while(n <= 0) { cout << " Errore! Inserire un numero di nodi che sia maggiore di zero: "; cin.getline(buffer,100); n=atol(buffer); cout << endl; } cout << " Ti ricordo che i vertici sono indicizzati da 0 a " << n-1; cout << endl; Grafo G(n); menu(); do { cin >> opzione; switch(opzione) { case(1): cout << "\n"; int v1; int v2; int w; cout << " Inserisci il primo vertice: "; cout<< " "; v1=legginumero(); cout << endl; cout << " Inserisci il secondo vertice: "; v2=legginumero(); cout << endl; cout << " Inserisci il peso dell'arco " << "(" << v1 << "," << v2 << "): "; w=legginumero(); cout << "\n"; G.inserisci_arco(v1, v2, w); cout << " Digita la nuova scelta (menu = 6): "; break; case(2): cout << "\n"; int sorgente; cout << " Inserisci il vertice sorgente: "; cin >> sorgente; cout << endl; cout << "\n"; dijkstra(G, sorgente); cout << " Fatto. Digita la nuova scelta (menu = 6): "; break; case(3): cout << "\n"; int sorgente2; cout << " Inserisci il vertice sorgente: "; cin >> sorgente2; cout << endl; cout << "\n"; bellman_ford(G, sorgente2); cout << " Fatto. Digita la nuova scelta (menu = 6): "; break; case(4): cout << "\n"; G.stampa_lista_cammini(); cout << "\n"; cout << " Digita la nuova scelta (menu = 6): "; break; case(5): cout << "\n"; G.stampa_lista_adiacenza(); cout << "\n"; cout << " Digita la nuova scelta (menu = 6): "; break; case(6): cout << "\n"; menu(); break; case(7): break; default: cout << " Scelta errata. Inserire un valore tra 1 e 5: " << endl; } }while(opzione != 7); system("PAUSE"); return 0; } float legginumero(){ char buffer2[100]; float valore; int numeri=0; int punti=0; int altri_caratteri; int valido; int i; do{ valido=1; altri_caratteri=0; cin.getline(buffer2,99); for(i=0;i<strlen(buffer2);i++) { if(buffer2[i]>='0'&&buffer2[i]<='9') numeri=1; if(buffer2[i]=='.') punti++; if(!(buffer2[i]>='0'&&buffer2[i]<='9')&&buffer2[i]!='.') altri_caratteri++; } if(numeri&&punti<=1&&!altri_caratteri) valido=1; else valido=0; if(!valido) cout<<" Valore non consentito"<<endl; }while(!valido); valore=atof(buffer2); return valore; }
Inserisci il primo vertice: Valore non consentito
Credo che tutto dipenda dal costrutto do-while...
Come posso fare?
Devo cambiare il ciclo?![]()
![]()

Rispondi quotando
VVoVe:
