Newsgroup: it.comp.lang.c++
Titolo: richiesta di aiuto

Ciao a tutti.Ho un problema.
Come si fa per dire al compilatore vc++ di non controllare l'esattezza di 
una riga?Praticamente quando compila fa un controllo per vedere se la 
sintassi è esatta e per verificare se tutto va bene. Gli devo dire di non 
fare controlli su una determinata riga. Il perché è molto semplice. In 
questo programma
#include <iostream>
using namespace std;
void main () {
            inizio:
            cout<<"Questo programma e' stato creato da Raffaele Mancuso\n";
            cout<<"MENU'\n";
            cout<<"Se scegli a avvio la calcolatrice di windows;\n";
            cout<<"Se scegli b avvio visual c++;\n";
            cout<<"Se scegli q esco;\n";
            char scelta;
            cin>>scelta;
            switch(scelta) {
            case 'a':system(""%SystemRoot%\system32\calc.exe"");
                        break;
            case 'b':system(""C:\Programmi\Microsoft Visual 
Studio\Common\MSDev98\Bin\MSDEV.EXE"");
                        break;
            case 'q':break;
            default:system("cls");
                        cout<<"Scelta non valida.\nDevi scegliere a,b o q 
(scritti minuscolo)\n";
                        goto inizio;
            }
            system("pause");
}
Ecco quello che mi da in fase di compilazione:
--------------------Configuration: prova - Win32 Debug--------------------
Compiling...
prova.cpp
C:\Documents and Settings\Mancuso\Documenti\raffaele\c++\prova.cpp(13) : 
error C2065: 'SystemRoot' : undeclared identifier
C:\Documents and Settings\Mancuso\Documenti\raffaele\c++\prova.cpp(13) : 
error C2296: '%' : illegal, left operand has type 'char [1]'
C:\Documents and Settings\Mancuso\Documenti\raffaele\c++\prova.cpp(13) : 
error C2017: illegal escape sequence
C:\Documents and Settings\Mancuso\Documenti\raffaele\c++\prova.cpp(13) : 
error C2017: illegal escape sequence
C:\Documents and Settings\Mancuso\Documenti\raffaele\c++\prova.cpp(13) : 
error C2065: 'system32' : undeclared identifier
C:\Documents and Settings\Mancuso\Documenti\raffaele\c++\prova.cpp(13) : 
error C2146: syntax error : missing ')' before identifier 'calc'
C:\Documents and Settings\Mancuso\Documenti\raffaele\c++\prova.cpp(13) : 
error C2059: syntax error : ')'
C:\Documents and Settings\Mancuso\Documenti\raffaele\c++\prova.cpp(15) : 
error C2146: syntax error : missing ')' before identifier 'C'
C:\Documents and Settings\Mancuso\Documenti\raffaele\c++\prova.cpp(15) : 
error C2017: illegal escape sequence
C:\Documents and Settings\Mancuso\Documenti\raffaele\c++\prova.cpp(15) : 
error C2017: illegal escape sequence
C:\Documents and Settings\Mancuso\Documenti\raffaele\c++\prova.cpp(15) : 
error C2017: illegal escape sequence
C:\Documents and Settings\Mancuso\Documenti\raffaele\c++\prova.cpp(15) : 
error C2017: illegal escape sequence
C:\Documents and Settings\Mancuso\Documenti\raffaele\c++\prova.cpp(15) : 
error C2017: illegal escape sequence
C:\Documents and Settings\Mancuso\Documenti\raffaele\c++\prova.cpp(15) : 
error C2017: illegal escape sequence
C:\Documents and Settings\Mancuso\Documenti\raffaele\c++\prova.cpp(15) : 
error C2059: syntax error : ')'
Error executing cl.exe.
prova.exe - 15 error(s), 0 warning(s)
Come vedi i percorsi li considera a modo suo. Per esempio il percorso 
%SystemRoot%\system32\calc.exe pensa che systemroot sia una variabile sua 
che non ho dichiarato,invece è una variabile di ambiente.Nella parte dove c'è 
system32 pensa che \s sia una sequenza di escape, invece fa parte del 
percorso (ovviamente da errore perché la sequenza di escare \s non 
esiste).Come risolvere il problema?Come dirgli di non effettuare controlli 
su quelle riga?

 
Scusa ma perche' il doppio " all'inizio e alla fine ??
Visto che
%SystemRoot%\system32\calc.exe
e' un comando che viene interpretato ed eseguito da Windows, perche' non 
scrivi semplicemente
case 'a' :
   system("%SystemRoot%\system32\calc.exe");
break;
siccome quella stringa viene interpretata dal sistema operativo non 
dovrebbe essere in grado di gestirla ???
Comunque credo che in
it.comp.programmare.win32
troverai chi ti potra' aiutare in pochissimo tempo !
Ciao.
P.s.: se vuoi far comparire i doppi apici in una stringa devi farli 
precedere dal backslash, cioe' cosi':
"Questi \" sono i doppi apici!"

 Come dirgli di non effettuare controlli su quelle riga?
Quando il compilatore segnala un errore bisogna pensare a come
correggere l'errore, non a come mantenere l'errore evitando i
controlli.
        Mauro 

 
Puo' anche non avere un tipo di ritorno e non avere return.
Ma, come gia' detto, void non va proprio bene.
Esempio:
main ()
{
     std::cout << "Hello World\n";
}
HTH
===
Gianni

No, il tipo di ritorno deve avercelo eccome. Il C++ non ha mai
supportato il ritorno implicito di int del C K&R, anche se molti
compilatori lo accettano per compatibilita' all'indietro.
Ciao,
Nicola


Ora ti spiego perchč ce ne vogliono due di ".Apparte il fatto che con un
paio di " non fuziona lo stesso.Premesso che ho risolto nel seguente modo:
case 'a':system("\"%SystemRoot%\\system32\\calc.exe\"");cioč facendo
precedere i caratteri speciali al \, e il programma mi funziona.Ritornando
ai due ".Ce ne vogliono due perchč quelli piů esterni,cioč il primo e
l'ultimo fanno parte del comando system,della sintassi di system.Gli altri
due,cioč il secondo e il 3° fanno parte del comando.Infatti nel dos deve
entrare "%SystemRoot%\system32\calc.exe" e non solo
%SystemRoot%\system32\calc.exe senza le ".Perchč?perchč se il comando entra
senza le " non lo esegue e da errore dicendo troppi parametri.Se invece il
comando entra con le" errore non ne da.Ecco perchč ce ne vogliono due.Cmq
hai ragione tu,č meglio scrivere i programmi correttamente!! :-)
Ciao e grazie.