Apparentemente sciocca

di il
8 risposte

Apparentemente sciocca

Salve a tutti
un augurio di buona pasqua a tutti anche se in ritrdo!
volevo sapere se con visual studio 2012 c'è un opzione per far segnare automaticamente tutti i blocchi { }
visto che il computer mi da fatal error C1075: che se ben ricordo è una disparità tra le parentesi graffe aperte e chiuse.
ma manualmente, mi senbra, che il conteggio tra le parentesi graffe aperte e chiuse sia lo stesso.
il sorgente è il seguente (speriamo che centri!):
{
	char pippo[50];
	char pluto[48];
	int posizione,errore,nbyte,lstringa,risposta,rm,wwe;
	char car;
	for (rm=0;rm <50;rm++) { pippo[rm]=0;  }
	for (rm=0;rm <48;rm++) { pluto[rm]=0;   }
	rm=0; car=' '; wwe=0;
	cout << " inserisi una stringa max 49 caratteri : \n";
	cin.getline (pippo,50);
	posizione = 0; errore=0; nbyte=0; lstringa=0; risposta=0;rm=0;
	cin.clear();
	menu:
	cout << "\nmenu' prova funzioni assembler \n";
	cout << "0) Fine Programma \n";
	cout << "1) LenStringa\n";
	cout << "2) Seachar\n";
	cout << "3) Seastringa\n";
	cout << "4) Parola\n";
	cout << "5) ContaParole\n";
	cout <<"6) LeftStringa\n";
    cout <<"7) MidStringa\n";
    cout <<"8) RightStringa\n";
    cout <<"9) FixStringa\n";
	cout << "10) chaleftstr\n";
    cout << "11) charightstr\n";
    cout << "12) chamidstr\n";
    cout << "13) chafixstr\n";
	cout << " scegli ? ";
	cin >> risposta;
    if ( risposta > 9) { goto menu; }
	switch (risposta)
              {
                 case 0:
                     {
                      nbyte=0;
                      lstringa=lenstringa(pippo,&nbyte);
                      cout << " dettaglio dimensioni delle varie routine\n";
                      cout << "1) cleareg     = 13 byte\n";
                      cout << "2) lenstringa = " << nbyte << " byte \n";
                      nbyte=0;
                      lstringa=lwarf(pippo,&nbyte);
                      cout << "3) lwarf        = " << nbyte << " byte\n";
                      nbyte=0;nbyte=seachar(pippo,car,&posizione,&errore);
                      cout << "4) seachar     = " << nbyte << " byte\n";
                      nbyte=0; nbyte=seastringa(pippo,pluto,&posizione,&errore);
                      cout << "5) seastringa = " << nbyte << " byte\n";
                      nbyte=0; nbyte=numparola(pippo,&lstringa,&posizione,&errore);
                      cout << "6) numparola = " << nbyte << " byte\n";
                      errore=0;nbyte=leftstringa(pippo,pluto,6,&errore);
                      cout << "7) leftstringa = " << nbyte << " byte\n";
                      errore=0;nbyte=midstringa(pippo,pluto,6,&errore);
                      cout << "8) midstringa = " << nbyte << " byte\n";
                      errore=0; nbyte=rightstringa(pippo,pluto,6,&errore);
                      cout << "9) rightstringa = " << nbyte << " byte\n";
                      errore=0; nbyte=fixstringa(pippo,pluto,6,5,1,&errore);
                      cout << "10) fixstringa = " << nbyte << " byte\n";
                      break; 
                     }
                 case 1:
                     {
                       lstringa=lenstringa(pippo,&rm);
                       cout << "la routine serve per calcolare di quanticaratteri e' composta la stringa\n";
                       cout << "la Stringa e' Lunga : " << lstringa << " caratteri \n";
                       cout << "la Routine occupa : " << rm << " spazi di memoria\n";
                       cout << "premi un tasto piu' invio per continuare ";
                       cin >> car;
                       break;
                     }
                 case 2:
                     {
                       cout << "inserisi un carattere da trovare : ";
                       cin >> car;
                       nbyte = seachar(pippo,car,&posizione,&errore);
                       cout << "\n Vediamo i valori restituiti dalla subroutine Assembler\n";
                       cout << "carattere cercato = " << car <<"\n";
                       cout << "posizione = "<< posizione << "\n";
                       cout << "errore =" << errore << "\n";
                       if (errore==0)
                         {
                           cout << "\nil carattere e stato trovato alla posizione " << posizione << "\n";
                           cout <<"la routine occupa " << nbyte << " byte di memoria \n";
                         }
                       if (errore==1)
                         {
                          cout << "\ncarattere non trovato\n";
                          errore=0;
                         }
                       break;
                     }
                 case 3:
                     {
                       cout << "\n inserisci una stringada cercare max 47 caratteri\n";
                       cin.getline (pluto,47);        
                       nbyte=seastringa(pippo,pluto,&posizione,&errore);
                       if (errore==0) 
                         {
                           cout << "\nla Stringa e' stata trovata a partire dalla posizione " << posizione << "\n";
                           cout <<"la routine occupa " << nbyte << " byte di memoria \n";
                         }
                       break;
                     }
                 case 4:
                     { 
                       posizione=0; errore=0;
                       nbyte =parola(pippo,pluto,&posizione,&errore);
                       if (errore==0)
                         { 
                           cout << "\nLa Stringa Prelevata e' : " << pluto << " la prossima posizione di partenza sarà : " << posizione << "\n";
                         }
                       break;
                     }
                 case 5:
                     { // l'errore si presenta qui
                       rm=0;posizione=0;errore=0;nbyte=0;nbyte=numparola (pippo,&rm,&posizione,&nbyte);
                       if (errore==0)
                         {
                           cout << "\nNessun Errore Riscontrato\n";
                           cout << "nella stringa ci sono : " << rm << " Parole\n";
                         }
                       break;
                     }
	              case 6:
                     {
                       cout << "quanti caratteri vuoi prendere ? ";
                       cin >> rm;
                       errore=0:nbyte=leftstringa(pippo,pluto,rm,&errore);
                       if (errore==0)
                         {
                           cout << "da sinistra ho preso : " << pluto << " caratteri \n";
                           cout << " la routine occupa : " << nbyte << " byte\n";
                         }
                       break;
                     }
                 case 7:
                     {
                       cout << "quanti caratteri vuoi prendere ? ";
                       cin >> rm;
                       errore=0;nbyte=midstringa(pippo,pluto,rm,&errore);
                       if (errore==0)
                         {
                          cout << " dal centro ho preso : " << pluto << " caratteri \n";
                          cout << "la routine occupa : " << nbyte << " byte\n";
                         }
                       break;
                     }
               case 8:
                   {
                     cout << "quanti caratteri vuoi prendere ? ";
                     cin >> rm;
                     errore=0:nbyte=rightstringa(pippo,pluto,rm,&errore);
                     if (errore==0)
                       {
                         cout << "da destra ho preso : " << pluto << " caratteri\n";
                         cout << "la routine occupa : " << nbyte << " byte\n";
                       }
                     break;
                   }
               case 9:
                   {
                     cout << "inserisci la posizione di partenza : ";
                     cin >> posizione
                     cout << "quanti caratteri vuoi prendere ? ";
                     cin >> rm;
                     cout << "1 sinistra verso destra 2 destra verso sinistra\n";
                     cout << " da dove vuoi prenderei caratteri ? ";
                     cin >> wwe;
                     errore=0;nbyte=fixstringa(pippo,pluto,posizione,rm,wwe,&errore);
                     if (errore==0)
                       {
                         cout << "dalla posizione " << posizione << "ho preso : " << pluto << " caratteri\n";
                         cout << "la routine occupa : " << nbyte << " byte\n";
                       }
                     break;
                   }
               case 10:
				   {
                     cin.clear();
                     cout << "\ninserisci caratteriche modificano la stringa : ";
                     cin.getline(pluto,47);
                     nbyte=0;rm=lenstringa(pluto,&nbyte);errore=0;
                     cout << "la vecchia stringa era : \n" << pippo << "\n";
                     nbyte=chaleftstr(pippo,pluto,rm,&errore);
                     if (errore==0)
                       {
                         cout << "la stringa e stata modificata da " << rm << " caratteri\n";
                         cout << "ora la nuova stringa e': \n";
                         cout << pippo << "\n";
                       }
                     break;
                   }
               case 11: 
				   {
                     cin.clear();
                     cout << "\n"inserisci caratteri che modificano la stringa : ";
                     cin << pluto;
                     nbyte=0;rm=lenstringa(pluto,&nbyte);errore=0;
                     cout << "la vecchia stringa era : \n" << pippo << "\n";
                     nbyte=charightstr(pippo,pluto,rm,&errore);
                    if (errore==0)
                      {
                        cout << "la stringa e stata modificata da " << rm << " caratteri\n";
                        cout << "ora la nuova stringa e': \n" << pippo << "\n";
                      }
                    break;
                   }
               case 12:
				   {
                    cin.clear();
                    cout << "inserisci caratteri chemodificano la stringa : ";
                    cin >> pluto;
                    nbyte=0;rm=lenstringa(pluto,&nbyte);
                    cout << "la vecchia stringa era : \n" << pippo << "\n";
                    nbyte=chamidstr(pippo,pluto,&nbyte);
                    if (errore==0)
                      {
                        cout << " la stringa e stata modificata da " << rm << " caratteri\n";
                        cout << " ora la nuova stringa e': \n" << pippo << "\n";
                      }
                   break;
                  }
               case 13:
				   {
                    cin.clear();
                    cout << "inserisci caratteri che modificano la stringa : ";
                    cin >> pluto;
                    nbyte=0:rm=lenstringa(pippo,&nbyte); rm=rm-1;
                    cout << "\n inserisci un numero tra 0 e " << rm << "\n";
                    cin >> posizione;
                    cout << "verso 1 da sinistra a destra 2 viceversa “;
                    cin >>  wwe;
                    cout << "la vecchia stringa era :\n"<<pippo<<"\n";
                    errore=0;  nbyte=charfixstr(pippo,pluto,posizione,rm,wwe,errore);
                    if (errore==0)
                      {
                         cout << " la stringa e' statamodificata da "<< rm << " caratteri\n";
                         cout << "ora la nuova stringa e': \n"<<pippo<<"\n";
                      }
                   break;
                  }
               default:
                   {
                     cout <<"\n opzione senza funzione di riferimento\n";
                     break;
                   }
              }
//---------------------------------------------------------------------------------------------
        if (risposta==0) { goto altro; }
		switch (errore)
              {
                case 1:
                    {
                      cout << "\nErrore parametro 1 stringa mal definita\n";
                      break;
                    }
                case 2:
                    {
                      cout << "\nErrore nel parametro  2 di lancio\n";
                      break;
                    }
                case 3:
                    {
                      cout << "\n Errore nel parametro 3 di di lancio\n";
                      break;
                    }
                case 4:
                    {
                      cout << "\nErrore nel parametro 4 di lancio\n ";
                      break;
                    }
                case 5:
                    {
                      cout <<"\nErrore nel parametro 5 di lancio\n";
                      break;
                    }
                case 6:
                    {
                      cout <<"\nDiscordanza tra 2 o piu' parametri numerici\n";
                      break;
                    }
                case 7:
                    {
                      cout << "\nConflitto tra dimensioni di stringhe\n";
                      break;
                    }
                case 8:
                    {
                      cout << "\nConflitto tra Dimensione stringa e uno o piu' parametri numerici\n";
                      break;
                    }
                case 9:
                    {
                      cout << "\nTentativo di sfondamento Stringa dovuto a calcoli numerici\n";
                      break;
                    }
                case 10:
                    {
                      cout << "\n Non Ho Tempo da Perdere trovatelo tu l'errore!\n";
                      break;
                    }
                default:
                        {
                          cout << "\nErrore ancora non Gestito\n";
                          break;
                        }
              }
  altro:
         {
           cout << "vuoi cambiare frase di test (1=si 2=no) ? ";
           cin >> risposta;
           if (risposta==1)
             {
               cout << " inserisi una stringa max 49 caratteri : \n";
               cin.getline (pippo,50);
             }
           if (risposta < 1) { goto altro; }
           if (risposta > 2) { goto altro; }
           goto menu;
         }
}
ringrazio anticipatamente chiunque mi diauna mano.

8 Risposte

  • Re: Apparentemente sciocca

    Ciao, ho dato un'occhiata (veloce) e c'erano degli errori di codifica (caratteri strani o sbagliati). Ti posto il codice privo di quegli errori, anche se ne restano molti altri riguardanti variabili non dichiarate.
    
    #include <iostream>
    using namespace std;
    
    int main() {
       char pippo[50];
       char pluto[48];
       int posizione,errore,nbyte,lstringa,risposta,rm,wwe;
       char car;
       for (rm=0;rm <50;rm++) { pippo[rm]=0;  }
       for (rm=0;rm <48;rm++) { pluto[rm]=0;   }
       rm=0; car=' '; wwe=0;
       cout << " inserisi una stringa max 49 caratteri : \n";
       cin.getline (pippo,50);
       posizione = 0; errore=0; nbyte=0; lstringa=0; risposta=0;rm=0;
       cin.clear();
       menu:
       cout << "\nmenu' prova funzioni assembler \n";
       cout << "0) Fine Programma \n";
       cout << "1) LenStringa\n";
       cout << "2) Seachar\n";
       cout << "3) Seastringa\n";
       cout << "4) Parola\n";
       cout << "5) ContaParole\n";
       cout <<"6) LeftStringa\n";
        cout <<"7) MidStringa\n";
        cout <<"8) RightStringa\n";
        cout <<"9) FixStringa\n";
       cout << "10) chaleftstr\n";
        cout << "11) charightstr\n";
        cout << "12) chamidstr\n";
        cout << "13) chafixstr\n";
       cout << " scegli ? ";
       cin >> risposta;
        if ( risposta > 9) { goto menu; }
       switch (risposta)
                  {
                     case 0:
                         {
                          nbyte=0;
                          lstringa=lenstringa(pippo,&nbyte);
                          cout << " dettaglio dimensioni delle varie routine\n";
                          cout << "1) cleareg     = 13 byte\n";
                          cout << "2) lenstringa = " << nbyte << " byte \n";
                          nbyte=0;
                          lstringa=lwarf(pippo,&nbyte);
                          cout << "3) lwarf        = " << nbyte << " byte\n";
                          nbyte=0;nbyte=seachar(pippo,car,&posizione,&errore);
                          cout << "4) seachar     = " << nbyte << " byte\n";
                          nbyte=0; nbyte=seastringa(pippo,pluto,&posizione,&errore);
                          cout << "5) seastringa = " << nbyte << " byte\n";
                          nbyte=0; nbyte=numparola(pippo,&lstringa,&posizione,&errore);
                          cout << "6) numparola = " << nbyte << " byte\n";
                          errore=0;nbyte=leftstringa(pippo,pluto,6,&errore);
                          cout << "7) leftstringa = " << nbyte << " byte\n";
                          errore=0;nbyte=midstringa(pippo,pluto,6,&errore);
                          cout << "8) midstringa = " << nbyte << " byte\n";
                          errore=0; nbyte=rightstringa(pippo,pluto,6,&errore);
                          cout << "9) rightstringa = " << nbyte << " byte\n";
                          errore=0; nbyte=fixstringa(pippo,pluto,6,5,1,&errore);
                          cout << "10) fixstringa = " << nbyte << " byte\n";
                          break;
                         }
                     case 1:
                         {
                           lstringa=lenstringa(pippo,&rm);
                           cout << "la routine serve per calcolare di quanticaratteri e' composta la stringa\n";
                           cout << "la Stringa e' Lunga : " << lstringa << " caratteri \n";
                           cout << "la Routine occupa : " << rm << " spazi di memoria\n";
                           cout << "premi un tasto piu' invio per continuare ";
                           cin >> car;
                           break;
                         }
                     case 2:
                         {
                           cout << "inserisi un carattere da trovare : ";
                           cin >> car;
                           nbyte = seachar(pippo,car,&posizione,&errore);
                           cout << "\n Vediamo i valori restituiti dalla subroutine Assembler\n";
                           cout << "carattere cercato = " << car <<"\n";
                           cout << "posizione = "<< posizione << "\n";
                           cout << "errore =" << errore << "\n";
                           if (errore==0)
                             {
                               cout << "\nil carattere e stato trovato alla posizione " << posizione << "\n";
                               cout <<"la routine occupa " << nbyte << " byte di memoria \n";
                             }
                           if (errore==1)
                             {
                              cout << "\ncarattere non trovato\n";
                              errore=0;
                             }
                           break;
                         }
                     case 3:
                         {
                           cout << "\n inserisci una stringada cercare max 47 caratteri\n";
                           cin.getline (pluto,47);
                           nbyte=seastringa(pippo,pluto,&posizione,&errore);
                           if (errore==0)
                             {
                               cout << "\nla Stringa e' stata trovata a partire dalla posizione " << posizione << "\n";
                               cout <<"la routine occupa " << nbyte << " byte di memoria \n";
                             }
                           break;
                         }
                     case 4:
                         {
                           posizione=0; errore=0;
                           nbyte =parola(pippo,pluto,&posizione,&errore);
                           if (errore==0)
                             {
                               cout << "\nLa Stringa Prelevata e' : " << pluto << " la prossima posizione di partenza sarà : " << posizione << "\n";
                             }
                           break;
                         }
                     case 5:
                         { // l'errore si presenta qui
                           rm=0;posizione=0;errore=0;nbyte=0;nbyte=numparola (pippo,&rm,&posizione,&nbyte);
                           if (errore==0)
                             {
                               cout << "\nNessun Errore Riscontrato\n";
                               cout << "nella stringa ci sono : " << rm << " Parole\n";
                             }
                           break;
                         }
                     case 6:
                         {
                           cout << "quanti caratteri vuoi prendere ? ";
                           cin >> rm;
                           errore=0;nbyte=leftstringa(pippo,pluto,rm,&errore);
                           if (errore==0)
                             {
                               cout << "da sinistra ho preso : " << pluto << " caratteri \n";
                               cout << " la routine occupa : " << nbyte << " byte\n";
                             }
                           break;
                         }
                     case 7:
                         {
                           cout << "quanti caratteri vuoi prendere ? ";
                           cin >> rm;
                           errore=0;nbyte=midstringa(pippo,pluto,rm,&errore);
                           if (errore==0)
                             {
                              cout << " dal centro ho preso : " << pluto << " caratteri \n";
                              cout << "la routine occupa : " << nbyte << " byte\n";
                             }
                           break;
                         }
                   case 8:
                       {
                         cout << "quanti caratteri vuoi prendere ? ";
                         cin >> rm;
                         errore=0;nbyte=rightstringa(pippo,pluto,rm,&errore);
                         if (errore==0)
                           {
                             cout << "da destra ho preso : " << pluto << " caratteri\n";
                             cout << "la routine occupa : " << nbyte << " byte\n";
                           }
                         break;
                       }
                   case 9:
                       {
                         cout << "inserisci la posizione di partenza : ";
                         cin >> posizione;
                         cout << "quanti caratteri vuoi prendere ? ";
                         cin >> rm;
                         cout << "1 sinistra verso destra 2 destra verso sinistra\n";
                         cout << " da dove vuoi prenderei caratteri ? ";
                         cin >> wwe;
                         errore=0;nbyte=fixstringa(pippo,pluto,posizione,rm,wwe,&errore);
                         if (errore==0)
                           {
                             cout << "dalla posizione " << posizione << "ho preso : " << pluto << " caratteri\n";
                             cout << "la routine occupa : " << nbyte << " byte\n";
                           }
                         break;
                       }
                   case 10:
                   {
                         cin.clear();
                         cout << "\ninserisci caratteriche modificano la stringa : ";
                         cin.getline(pluto,47);
                         nbyte=0;rm=lenstringa(pluto,&nbyte);errore=0;
                         cout << "la vecchia stringa era : \n" << pippo << "\n";
                         nbyte=chaleftstr(pippo,pluto,rm,&errore);
                         if (errore==0)
                           {
                             cout << "la stringa e stata modificata da " << rm << " caratteri\n";
                             cout << "ora la nuova stringa e': \n";
                             cout << pippo << "\n";
                           }
                         break;
                       }
                   case 11:
                   {
                         cin.clear();
                         cout << "\ninserisci caratteri che modificano la stringa : ";
                         cin >> pluto;
                         nbyte=0;rm=lenstringa(pluto,&nbyte);errore=0;
                         cout << "la vecchia stringa era : \n" << pippo << "\n";
                         nbyte=charightstr(pippo,pluto,rm,&errore);
                        if (errore==0)
                          {
                            cout << "la stringa e stata modificata da " << rm << " caratteri\n";
                            cout << "ora la nuova stringa e': \n" << pippo << "\n";
                          }
                        break;
                       }
                   case 12:
                   {
                        cin.clear();
                        cout << "inserisci caratteri chemodificano la stringa : ";
                        cin >> pluto;
                        nbyte=0;rm=lenstringa(pluto,&nbyte);
                        cout << "la vecchia stringa era : \n" << pippo << "\n";
                        nbyte=chamidstr(pippo,pluto,&nbyte);
                        if (errore==0)
                          {
                            cout << " la stringa e stata modificata da " << rm << " caratteri\n";
                            cout << " ora la nuova stringa e': \n" << pippo << "\n";
                          }
                       break;
                      }
                   case 13:
                   {
                        cin.clear();
                        cout << "inserisci caratteri che modificano la stringa : ";
                        cin >> pluto;
                        nbyte=0;rm=lenstringa(pippo,&nbyte); rm=rm-1;
                        cout << "\n inserisci un numero tra 0 e " << rm << "\n";
                        cin >> posizione;
                        cout << "verso 1 da sinistra a destra 2 viceversa ";
                        cin >>  wwe;
                        cout << "la vecchia stringa era :\n"<<pippo<<"\n";
                        errore=0;  nbyte=charfixstr(pippo,pluto,posizione,rm,wwe,errore);
                        if (errore==0)
                          {
                             cout << " la stringa e' statamodificata da "<< rm << " caratteri\n";
                             cout << "ora la nuova stringa e': \n"<<pippo<<"\n";
                          }
                       break;
                      }
                   default:
                       {
                         cout <<"\n opzione senza funzione di riferimento\n";
                         break;
                       }
                  }
    //---------------------------------------------------------------------------------------------
            if (risposta==0) { goto altro; }
          switch (errore)
                  {
                    case 1:
                        {
                          cout << "\nErrore parametro 1 stringa mal definita\n";
                          break;
                        }
                    case 2:
                        {
                          cout << "\nErrore nel parametro  2 di lancio\n";
                          break;
                        }
                    case 3:
                        {
                          cout << "\n Errore nel parametro 3 di di lancio\n";
                          break;
                        }
                    case 4:
                        {
                          cout << "\nErrore nel parametro 4 di lancio\n ";
                          break;
                        }
                    case 5:
                        {
                          cout <<"\nErrore nel parametro 5 di lancio\n";
                          break;
                        }
                    case 6:
                        {
                          cout <<"\nDiscordanza tra 2 o piu' parametri numerici\n";
                          break;
                        }
                    case 7:
                        {
                          cout << "\nConflitto tra dimensioni di stringhe\n";
                          break;
                        }
                    case 8:
                        {
                          cout << "\nConflitto tra Dimensione stringa e uno o piu' parametri numerici\n";
                          break;
                        }
                    case 9:
                          cout<<"\nTentativo di sfondamento Stringa dovuto a calcoli numerici\n";
                          break;
                    case 10:
                        {
                          cout << "\n Non Ho Tempo da Perdere trovatelo tu l'errore!\n";
                          break;
                        }
                    default:
                            {
                              cout << "\nErrore ancora non Gestito\n";
                              break;
                            }
                  }
      altro:
             {
               cout << "vuoi cambiare frase di test (1=si 2=no) ? ";
               cin >> risposta;
               if (risposta==1)
                 {
                   cout << " inserisi una stringa max 49 caratteri : \n";
                   cin.getline (pippo,50);
                 }
               if (risposta < 1) { goto altro; }
               if (risposta > 2) { goto altro; }
               goto menu;
             }
    }
    
    Altri errori che avevi fatto erano:
    1) mancanza di punto-e-virgola alla fine di un'istruzione
    2) due punti al posto di punto-e-virgola
    3) cin << anzichè cin >>

    Infine, se mi permetti, qualche consiglio:
    1) una sola istruzione per riga, cioè niente
    a=0; b=0; c=1;
    2) niente graffe negli switch, cioe
    
    case 4:
        cout<<"Ciao";
        break;
    case...
    
    3) niente goto



    PS. goto???
  • Re: Apparentemente sciocca

    Goto esiste in C però non è il massimo livello di programmazione che si possa ottenere
    per il resto concordo, bravo minomic
  • Re: Apparentemente sciocca

    luigibana96 ha scritto:


    non è il massimo livello di programmazione che si possa ottenere
    Esattamente quello che intendevo... Ricorda un po' assembly!
  • Re: Apparentemente sciocca

    Il goto è vietato nella programmazione strutturata!
    Viola il teorema di Bohm-Jacopini!
  • Re: Apparentemente sciocca

    Sapevo che il goto fosse altamente sconsigliato, in quanto rende il codice poco leggibile. In effetti, non credo violi il teorema di Bohm Iacopini in quanto il goto è un altro modo per esprimere un ciclo condizionato (while o do-while) oppure per determinare l'uscita da un ciclo. Sono dalla parte dello sconsigliato, ma non vietato: se si pensa a dei cicli annidati, può anche essere utile per determinare un'uscita dal ciclo esterno condizionata. Chiarimenti bene accetti
    Non siamo Off-Topic no?
  • Re: Apparentemente sciocca

    Grazie per le correzioni
    al proposito del goto secondo me viene un pò troppo demonizzato.
    in fondo è una istruzione come tante altre e molto spesso è molto utile e soprattutto molto veloce.
    la cosa inportante e utilizzarlo solo quando serve secondo me Bohm-Jacopini quando hanno fatto il loro teorema volevano semplicemente limitare l'uso di questa istruzione perchè allora se ne faceva grande uso in quanto, molto spesso, e la soluzione più immediata.
    Bohm-Jacopini erano contro la cosidetta programmazione istintiva cosa che hai loro tempi andava molto di moda e che le istruzioni quali goto e anticamente gosub et simili rappresentavano visto che a quel epoca andava di moda il basic e l'assembler.
    per quanto riguarda invece il fatto di mettere più istruzioni su una stessa riga lo faccio per economizzare la carta quando stampo i listati.
    e poi è un fatto comodo basta che tutte le istruzioni sulla stessa riga abbiano lo stesso significato.
    esempio
    a=1; b=2; c=3;
    può anche andare bene perchè tutte le istruzioni hanno lo stesso scopo e quindi non creano confusione.
    mentre se faccio esempio :
    a=1; if (a==?) { ................. }
    oppure 
    a=1; for (............)

    queste ultime 2 possono causare confusione in quanto le 2 istruzioni fanno cose diverse.
    comunque lo stile di programmazione e personale e lo si sviluppa con il tempo.

    comunque sapete se con visual studio (visual c++)
    c'è un opzione per far segnare automaticamente tutti i blocchi { }
  • Re: Apparentemente sciocca

    Tutti i blocchi in un colpo solo no, tuttavia se vai in:
    Tools -> Option -> Text Editor -> C/C++ -> Formatting e imposti Outline Statement Blocks a true, per ogni { aperta, sulla sinistra compare un riquadro [-] che ti permette di far collassare il blocco corrispondente.

    Per quanto riguarda il goto.
    Il dibattito sull'uso o meno di tale istruzione non si è mai sopito del tutto e ancora oggi c'è chi la difende, chi l'attacca, chi ne esagera etc.
    Personalmente non l'ho mai usata, ma se dovessi farlo succederebbe solo per rimandi all'interno di una stessa funzione e solo se programmo in C puro. In C++ goto interferisce pesantemente con il meccanismo dei distruttori e delle eccezioni, pertanto oltre a tutta la letteratura che ne sconsiglia l'uso si deve tenere conto anche di questo aspetto.
    Se si vuole usare nessuno lo vieta (lo standard non ha cancellato goto dalla lista delle istruzioni del linguaggio), ma se non si hanno ben presente tutte le implicazioni che questo comporta è meglio lasciarla perdere.
  • Re: Apparentemente sciocca

    Ciao shodan
    tutto bene ?
    grazie per la risposta sul compilatore come spesso dico sei meglio della guida di visual studio.
    ti do un consiglio perchè non scrivi una guida sul compilatore ti faresti un bel pò di soldini.
    io la comprerei di sicuro.
    ti ringrazio anche per il goto
    mi ricorderò di non usarlo quando farò le classi.
Devi accedere o registrarti per scrivere nel forum
8 risposte