C++ commandes system("..") windows - C++ - Programmation
Marsh Posté le 12-09-2007 à 17:28:11
argh ! un goto dans un programme C++ !
Sinon, tente en mettant un "\" devant ton espace
Marsh Posté le 12-09-2007 à 19:46:38
j'ai testé cest pareil Dumbledore,
en fait il faudrai que je trouve toutes les fonctions et leur synthax et leur utilisation, je googleliz..
"
argh ! un goto dans un programme C++ !"
pourquoi cest pas bien les goto
Marsh Posté le 12-09-2007 à 21:18:06
ça gêne à la lisibilité du programme. C'est à utiliser de manière vraiment parcimonieuse quand t'as vraiment pas le choix et là, en l'occurrence, avec un while, c'est très facile à éviter
Marsh Posté le 13-09-2007 à 09:24:01
en général tu vas au casse pipe
les goto y a genre 0.1 vrai raison de l'utiliser. En 10 ans d'XP j'en ai vu un une fois utilisé alors qu'on pouvait rien faire d'autre.
Autant le break en terminaison prématurée de boucle ok, autant le goto ... ca démontre une méconnaissance assez crasse du langage.
Faut voir que bon, ca fait chier le compilo car ca lui brise son flot de controle, ca l'empeche d'optimsier des trucs etc ...
Bref :
Each time you sue a goto, god kills a kitten.
Please, think of the Kitten
Marsh Posté le 13-09-2007 à 11:16:08
ReplyMarsh Posté le 13-09-2007 à 15:35:27
Code :
|
Ca fonctionne avec deux \ devant l'espace (en tout cas sous linux).
la commande passé au systeme devient C:\Program\ Files\ (x86)\Sawmill ... donc l'espace est protégé et le systeme trouve le fichier.
ex:
system("\"C:\\Program\\ Files\\ (x86)\\Sawmill\\SawmillCL.exe\"" );
edit: en voyant le resultat en grand, je me rends compte que \ ne peut pas être le caractère qui protège l'espace puisqu'il délimite l'arborescence sous windows. Peut être / alors...
Marsh Posté le 13-09-2007 à 16:04:30
En fait sous windows chez moi ceci fonctionne parfaitement:
Code :
|
...
Si ton programme ne fait que ça, c'est peut-être plus simple de faire un script, au moins c'est adapté.
Marsh Posté le 15-09-2007 à 14:08:11
eX- a écrit : ouais p-e bien Joel F moi je vois pas de problemes |
Parce qu'il faut un minimum d'experience pour le voir, ce probleme.
http://en.wikipedia.org/wiki/GOTO# [...] goto_usage
Marsh Posté le 17-09-2007 à 20:01:51
Ace17 a écrit : |
peut etre Ace17 mais tant que ca satisfait, mes applis, mes clients, et mes collègues ,
je ne vois pas de problèmes à utiliser goto.
Merci quand meme
Marsh Posté le 17-09-2007 à 20:05:13
oui ms si un jour un collègue doit reprendre un de tes projets, il va mettre 10 fois plus de temps pour comprendre ce que tu as fait par rapport à un code propre.
edit: ortograf
Marsh Posté le 17-09-2007 à 20:35:57
eX- a écrit : |
Parce que en plus, tu travail comme ça
c'ets quoi ta boite ? j'espere que c'ets aps Dassault System ou un truc de gestion de centrale
Marsh Posté le 18-09-2007 à 00:08:26
eX- a écrit : |
Precisemment. Tu ne le vois pas, mais c'est juste parce que tu ne regardes pas assez loin. Cela te fait considerer ton programme comme un produit fini, c'est a dire comme une chose a laquelle tu n'effectueras plus de corrections. Le goto augmente ta probabilite de faire des erreurs lorsque tu modifieras ton programme par la suite, c'est aussi simple que ca.
Marsh Posté le 18-09-2007 à 11:20:35
En tout cas je me demande où tu as appris à utiliser goto.
Mon père a fait un IUT informatique dans les années 70 et c'était déjà formellement interdit. Je n'ai jamais vu le moindre prof ni le moindre bouquin parler du goto sinon pour dire de ne pas l'utiliser.
A part en assembleur, je n'ai jamais utilisé directement un jump.
Marsh Posté le 18-09-2007 à 17:03:41
Ace17 a écrit : |
voila cest deja plus precis comme explication, mais si mes collegues sont intelligents, il n'y a pas de problemes, et on s'en sert pas souvent.
toute facon je n'ai pas a justifier d'une quelconque utilisation de goto etant donné que le coeur du probleme ce situe autre pars.
ensuite:
ptitchep a écrit : En tout cas je me demande où tu as appris à utiliser goto. |
merci de nous raconter la vie de ton popa, mais tu ne repond malheuresement qu'a la polémique du goto et non le probleme initial,à savoir comment gerer les espaces avec la fonction system('') en c++.
Merci à vous
Marsh Posté le 18-09-2007 à 17:09:27
eX- a écrit : |
lol
mais j'ai déjà écrit ça:
ptitchep a écrit : En fait sous windows chez moi ceci fonctionne parfaitement:
|
Comme tu le vois j'ai un espace moi aussi et pourtant mon executable est lancé sans problème. Tu es bien sûr de tes guillemets? J'ai windows XP et je ne pense pas que le fonctionnement de system() varie d'un pc à l'autre.
Marsh Posté le 20-09-2007 à 18:09:26
ptitchep a écrit : |
ptitchep a écrit : |
ok pour tester @home avc un nmap par exemple sur f:\n map\nmap.exe
#include <iostream.h>
int main()
{
system("\"f:\\n map\\nmap.exe\"" );
system("pause" );
return 0;
}
cela passe merci pour ta contribution ptitchep.
Ma question initiale etait de savoir gerer les espaces sur la fonction system("chemin path" ) pour ca cest ok.
maintenant comme tu doit le savoir par exemple pour nmap il attend des arguments.
ma question est maintenant de savoir comment passer des arguments avc la fonction system("" ) tout en gerant deja les espaces blancs (f:\n...map\.)
à savoir
system("\"f:\n map\nmap.exe\"" );
ca le lauch simplement
avec par exemple -P0 ou meme plusieurs: nmap -P0 host
nmap -v -A scanme.nmap.org /and co...
Merci à vous
Marsh Posté le 20-09-2007 à 18:30:58
Et system("\"f:\n map\nmap.exe\" \"argument 1\" arg2" ) ca marche pas?
Marsh Posté le 20-09-2007 à 19:01:53
bah system attends une bete chaine. Donc tu construis ta chaine de commande via ostringstream et tu lui balance le str().
Marsh Posté le 12-01-2009 à 04:55:32
Bonjour,
Je suis un peu dans la même situation, sauf que je récupère la chaine dans une variable via une CFileDialog. Du coup je ne peux pas savoir à l'avance s'il y aura un espace ou pas, et si l'utilisateur pioche dans un dossier à la "Documents and Settings" ça ne marche donc pas.
Code :
|
Merci d'avance.
Marsh Posté le 12-01-2009 à 08:12:03
bah faut ecrire une chtite fonction qui parse la chaine est ajoute ce qui faut. avec boost::strings ca devrait aller
Marsh Posté le 12-01-2009 à 08:48:59
Hum oui en effet, j'ai juste pas réfléchit.
Il m'a juste suffit de concaténer un " au début et à la fin de ma variable. Ce qui n'est pas très dur avec un std::string ^^.
Marsh Posté le 12-09-2007 à 13:39:34
bonjour,
j'ai un petit souci avec du code:
#include <iostream.h>
int main ()
{
int rec;
a:
cout << " choix de la commande " << endl;
cout << "1: - SawmillCL.exe -p "Sawmill - MTL - eSafe" -a bd -" << endl;
cout << "2: - SawmillCL.exe -p "Sawmill - MTL - eSafe" -a rp -" << endl;
cin >> rec;
switch (rec)
{
case 1:
system("\"C:\\Program Files (x86)\\Sawmill\\SawmillCL.exe -p \"Sawmill - MTL - eSafe\" -a bd\"" );
break;
case 2:
system("\"C:\\Program Files (x86)\\Sawmill\\SawmillCL.exe -p \"Sawmill - MTL - eSafe\" -a rp\"" );
break;
default:
goto a;
}
//system("ping 192.168.1.1" );
system("pause" );
}
en fait mon probleme est d'arriver à gerer les espaces dans la commande à passer
le chemin a la base est " c:\Program Files (x86)\Sawmill\SawmillCL.exe "
voici l'erreur:
'C:\Program' is not recognized as an internal or external command,
operable program or batch file.
Press any key to continue . . .
en fait meme en testant avec un .exe daffichage dos à la place de SawmillCL.exe cela me fait une erreur egalement
merci