Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 12 su 12
  1. #11
    dichiari la funzione subito dopo la dichiarazione delle librerie
    ovvero il prototipo
    float leggi numero();

    poi sotto il tuo main incolli tutta la funzione che ti ho postato,nel tuo caso della funzione da me data puoi togliere alcune cose dato che quella controlla i numeri in virgola mobile



    ogni qualvolta ti serve la funzione la chiami

  2. #12
    Dopo aver ripulito il codice e aver modificato la tua funzione che dopo l' inserimento di un valore non consentito riconosceva ogni valore lecito come non consentito ecco cosa è venuto fuori:

    codice:
    #include <iostream>
    #include <stdlib.h>
    #include <iostream>
    #include "Grafo.h"
    #include "Heap.h"
    #include "Shortest_path.h"
    #include "Menu.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;
    }

    Dopo aver eseguito l' exe si verifica il seguente problema. Prima di aver immesso un valore compare la scritta :
    Inserisci il primo vertice: Valore non consentito

    Credo che tutto dipenda dal costrutto do-while...
    Come posso fare?
    Devo cambiare il ciclo?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.