C++ programme semblable a cmd.exe de Windows
Résolu/Fermé
Wazza6
Messages postés
180
Date d'inscription
lundi 31 décembre 2007
Statut
Membre
Dernière intervention
21 juillet 2012
-
23 mars 2009 à 23:29
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 25 mars 2009 à 01:47
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 25 mars 2009 à 01:47
A voir également:
- C++ programme semblable a cmd.exe de Windows
- Programme demarrage windows 10 - Guide
- Cmd.exe - Guide
- Passer de windows 7 à windows 10 - Accueil - Mise à jour
- Clé windows 10 gratuit - Guide
- Désinstaller programme windows 10 - Guide
16 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
23 mars 2009 à 23:35
23 mars 2009 à 23:35
Salut,
Lorsque tu inclues iostream sans le .h (et c'est une bonne habitude ;-)), les fonctions sont inclues dans l'espace de nom std.
Ainsi les fonctions cout, etc. doivent être appelées par :
std::cout<< (de même pour cin).
Ou alors, si tu veux inclure std à ton namespace courant, tu peux utiliser :
using namespace std;
après les #define.
Cdlt
Lorsque tu inclues iostream sans le .h (et c'est une bonne habitude ;-)), les fonctions sont inclues dans l'espace de nom std.
Ainsi les fonctions cout, etc. doivent être appelées par :
std::cout<< (de même pour cin).
Ou alors, si tu veux inclure std à ton namespace courant, tu peux utiliser :
using namespace std;
après les #define.
Cdlt
Wazza6
Messages postés
180
Date d'inscription
lundi 31 décembre 2007
Statut
Membre
Dernière intervention
21 juillet 2012
40
23 mars 2009 à 23:42
23 mars 2009 à 23:42
ah oui désolé j'avais oublié le
using namespage std; avant le main dans le code sur cette page , mais il est inclu dans mon vrai projet.
using namespage std; avant le main dans le code sur cette page , mais il est inclu dans mon vrai projet.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
23 mars 2009 à 23:52
23 mars 2009 à 23:52
D'ailleurs, j'avais même pas regardé ton code, il y a d'autres erreurs.
char inst[50]; pas de NULL, et inversion de la variable et des crochets.
int main()
return 0;
char inst[50]; pas de NULL, et inversion de la variable et des crochets.
int main()
return 0;
Wazza6
Messages postés
180
Date d'inscription
lundi 31 décembre 2007
Statut
Membre
Dernière intervention
21 juillet 2012
40
23 mars 2009 à 23:56
23 mars 2009 à 23:56
OK merci je vais verifier
Edit: Si tu m'as bien dit de prendre le [50] et de le mettre juste apres le char , ce que j'ai fait , ça ne fonctionne pas et sa me donne:
C:\Users\Administrator\Documents\CC++\1st_cpp\test\lab\main.cpp|12|error: expected unqualified-id before '[' token|
C:\Users\Administrator\Documents\CC++\1st_cpp\test\lab\main.cpp|12|warning: statement has no effect|
si je replace le [50] après la variable , pas d'erreur du côté de la compilation , mais toujours le même résultat en fin de compte
Edit: Si tu m'as bien dit de prendre le [50] et de le mettre juste apres le char , ce que j'ai fait , ça ne fonctionne pas et sa me donne:
C:\Users\Administrator\Documents\CC++\1st_cpp\test\lab\main.cpp|12|error: expected unqualified-id before '[' token|
C:\Users\Administrator\Documents\CC++\1st_cpp\test\lab\main.cpp|12|warning: statement has no effect|
si je replace le [50] après la variable , pas d'erreur du côté de la compilation , mais toujours le même résultat en fin de compte
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
24 mars 2009 à 00:05
24 mars 2009 à 00:05
Edit: Si tu m'as bien dit de prendre le [50] et de le mettre juste apres le char , ce que j'ai fait , ça ne fonctionne pas et sa me donne:
J'ai dit exactement le contraire. Dans ta première version tu avais mis :
char[50] inst=NULL; // L'instruction (ex: help ou shutdown/s dans cmd.exe .
Je te disais que le [50] était à la mauvaise place.
J'ai dit exactement le contraire. Dans ta première version tu avais mis :
char[50] inst=NULL; // L'instruction (ex: help ou shutdown/s dans cmd.exe .
Je te disais que le [50] était à la mauvaise place.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Wazza6
Messages postés
180
Date d'inscription
lundi 31 décembre 2007
Statut
Membre
Dernière intervention
21 juillet 2012
40
24 mars 2009 à 00:01
24 mars 2009 à 00:01
ah et le main sans les paranthèses et le return 0 sans point-virgule c'est une faute d'inattention en écrivant le message , dans le code il est correct
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
24 mars 2009 à 00:07
24 mars 2009 à 00:07
Sinon j'ai revu une erreur.
cin <<"inst"; //Demande à l'utilisateur une instruction
Tu as mis les chevrons dans le mauvais sens.
Il faut mettre : cin >> ...
cin <<"inst"; //Demande à l'utilisateur une instruction
Tu as mis les chevrons dans le mauvais sens.
Il faut mettre : cin >> ...
Wazza6
Messages postés
180
Date d'inscription
lundi 31 décembre 2007
Statut
Membre
Dernière intervention
21 juillet 2012
40
24 mars 2009 à 00:07
24 mars 2009 à 00:07
ah oups... au moins maintenant on sait que le problème n'est pas là...
Wazza6
Messages postés
180
Date d'inscription
lundi 31 décembre 2007
Statut
Membre
Dernière intervention
21 juillet 2012
40
24 mars 2009 à 00:11
24 mars 2009 à 00:11
J'ai modifié mon else car il était erroné , maintenant mon programme me dit toujours que la commande est incorrecte... je vais aller voir dans ma discussion précédente sur le C...
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
24 mars 2009 à 00:15
24 mars 2009 à 00:15
J'ai modifié mon else car il était erroné , maintenant mon programme me dit toujours que la commande est incorrecte.
Avec la version de ton programme que tu as donnée, il est difficile de t'aider. Non seulement il y a plein de fautes que tu as rajouté, et en plus la version est incomplète.
Avec la version de ton programme que tu as donnée, il est difficile de t'aider. Non seulement il y a plein de fautes que tu as rajouté, et en plus la version est incomplète.
Wazza6
Messages postés
180
Date d'inscription
lundi 31 décembre 2007
Statut
Membre
Dernière intervention
21 juillet 2012
40
24 mars 2009 à 00:18
24 mars 2009 à 00:18
ok voici le code complet... attention il est facile de se perdre (je suis TRES désorganisé)
:P
note: Le programme n'est pas terminé , alors les fonctions décrites dans help ne sont pas toutes vraies
#include <iostream> #include <windows.h> using namespace std; char inst[50]; bool pexit=false; int main() { char inst[50]; bool pexit=false; while(!pexit) { cout << ".../$USR/$Dir/LAB.EXE:>"; cin >> inst; if(inst=="exit") { pexit=true; break; } else if(inst=="help") { cout << "Note:commands are case sensitive! \n help: Gives this \n exit: shut down the program \n info: gives information about the program."<< endl; cout << "texit: shutsdown the program after an amount of time \n wexit: Shuts down windowa "<<endl; break; } else if(inst=="info") { cout << " Written by Gabriel Arsenault in C++." <<endl; break; } else if(inst=="wexit") { cout << "Windows will shutdown 5 seconds after you receive a confirmation" <<endl; system("Shutdown.exe -r -m @IP -t 5 -c \"Command confirmed...\""); break; } else if(inst=="EntertheSandman") { cout << "Eeeexiiiit liiight... :P" << endl; pexit=true; cout << "Variable \" exit \" has been changed to true" <<endl; Sleep(750); cout << "Bye" <<endl; break; } else if(inst=="revealyoursecret") { cout << " I swear my intentions are evil... \n Made by Gabriel Arsenault for devil 122 in association with joe prank 2333" << endl; break; } else if(inst=="texit") { char time; time=0; cin >> time; Sleep(time); pexit=true; break; } else { cout << " Instruction incorrect." <<endl; } } return 0; }
:P
note: Le programme n'est pas terminé , alors les fonctions décrites dans help ne sont pas toutes vraies
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
24 mars 2009 à 00:28
24 mars 2009 à 00:28
Effectivement lol.
Ton code compile parfaitement. Néanmoins, il y a des erreurs.
Pour faire une comparaison entre deux tableaux de char, il ne faut pas utiliser l'opérateur == mais la fonction strcmp
if(strcmp(inst,"exit")==0) { //si inst correspond à "exit". N'oublie pas d'inclure string.
Sinon en C++, il y a la classe string qui remplace les tableaux de char, et là l'opérateur == fonctionnerait ;-)).
Ton code compile parfaitement. Néanmoins, il y a des erreurs.
Pour faire une comparaison entre deux tableaux de char, il ne faut pas utiliser l'opérateur == mais la fonction strcmp
if(strcmp(inst,"exit")==0) { //si inst correspond à "exit". N'oublie pas d'inclure string.
Sinon en C++, il y a la classe string qui remplace les tableaux de char, et là l'opérateur == fonctionnerait ;-)).
Wazza6
Messages postés
180
Date d'inscription
lundi 31 décembre 2007
Statut
Membre
Dernière intervention
21 juillet 2012
40
24 mars 2009 à 00:31
24 mars 2009 à 00:31
Les string j'ai déjà essayé mais c'était trop inconfortable... je laisse ça aux filles! =)
Petite blague...
Bref j'ai déjà essayé mais la compilation plantait toujours... je vais essayer avec strcmp... on verra bien
Petite blague...
Bref j'ai déjà essayé mais la compilation plantait toujours... je vais essayer avec strcmp... on verra bien
Wazza6
Messages postés
180
Date d'inscription
lundi 31 décembre 2007
Statut
Membre
Dernière intervention
21 juillet 2012
40
24 mars 2009 à 00:35
24 mars 2009 à 00:35
Wow!! ça marche! Merci... quelle erreure stupide... je n'aurais pas dû arrêter mon cours en plein milieu :)
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
24 mars 2009 à 00:43
24 mars 2009 à 00:43
la compilation plantait toujours
Qu'est-ce qui plantait à la compilation ? Ton programme compile parfaitement sur ma machine. Juste qu'il ne faut pas le résultat escompté à l'exécution. Mais ceci est normal puisque tu fais : if (instr=="exit") alors instr contient une adresse mémoire, tout comme "exit". Et comme, ils ne contiennent pas la même adresse, la comparaison sera toujours fausse. D'où l'intérêt de la fonction strcmp.
De plus l'avantage du string (eh oui j'en remets une couche) est que cela simplifie le tout. Et en plus c'est mieux géré.
Tu remplaces juste : char inst[50]; par string inst;
Et sinon pourquoi tu as deux variables globales alors que tu caches leur visibilité dans ta fonction main() ?
Qu'est-ce qui plantait à la compilation ? Ton programme compile parfaitement sur ma machine. Juste qu'il ne faut pas le résultat escompté à l'exécution. Mais ceci est normal puisque tu fais : if (instr=="exit") alors instr contient une adresse mémoire, tout comme "exit". Et comme, ils ne contiennent pas la même adresse, la comparaison sera toujours fausse. D'où l'intérêt de la fonction strcmp.
De plus l'avantage du string (eh oui j'en remets une couche) est que cela simplifie le tout. Et en plus c'est mieux géré.
Tu remplaces juste : char inst[50]; par string inst;
Et sinon pourquoi tu as deux variables globales alors que tu caches leur visibilité dans ta fonction main() ?
Wazza6
Messages postés
180
Date d'inscription
lundi 31 décembre 2007
Statut
Membre
Dernière intervention
21 juillet 2012
40
25 mars 2009 à 00:54
25 mars 2009 à 00:54
Avec string la compilation plante... ça me dit qu'il manque une instruction quelque-pat quelque-chose su genre... c'était pas dans CE programme...
"Et sinon pourquoi tu as deux variables globales alors que tu caches leur visibilité dans ta fonction main() ? "
Ça c'est du jargon pour moi je comprends vraiment pas... mais si ça veut dire que j'ai des variables qui sont en dehors du main :
1. C'est plus le cas
2.C'était parce-que je croyais que la fonction while ne pouvait pas accéder aux variables alors je les ai changés de place.
Merci encore.
P.S. est-ce que les string peuvent être comparés avec un simple
?
"Et sinon pourquoi tu as deux variables globales alors que tu caches leur visibilité dans ta fonction main() ? "
Ça c'est du jargon pour moi je comprends vraiment pas... mais si ça veut dire que j'ai des variables qui sont en dehors du main :
1. C'est plus le cas
2.C'était parce-que je croyais que la fonction while ne pouvait pas accéder aux variables alors je les ai changés de place.
Merci encore.
P.S. est-ce que les string peuvent être comparés avec un simple
if(nomdestring=="Bou!") { cout << "Ah!!" <<endl; }
?
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
25 mars 2009 à 01:47
25 mars 2009 à 01:47
D'accord pour les variables globales. Il faut éviter de les utiliser ;-)).
Pour les string, oui l'opérateur== a été redéfini. Ainsi tu peux utiliser la notation if(nomString=="couocu") ;..
C'est l'un des avantages de string.
Pour les string, oui l'opérateur== a été redéfini. Ainsi tu peux utiliser la notation if(nomString=="couocu") ;..
C'est l'un des avantages de string.