C++ programme semblable a cmd.exe de Windows
Résolu
Wazza6
Messages postés
180
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
je fais présentement un programme semblable à cmd.exe de Windows pour mon plaisir, mais il ne fonctionne pas tout à fait.
Mon programme me fait tout jusqu'au if , il ne fait que me renvoyer le cout et le cin du début encore et encore, il ne ferme pas , il n'écrit pas, il ne fait que les deux lignes en souligné dans le code.
Si quelqu'un sait ce qui cloche dans ce code s.v.p me le dire
NOTE:Ceci n'est pas le vrai code mais en gros c'est pareil , si je n'ai pas mis le vrai code c'est pour:
1. Pour ne pas que tout le monde puisse le prendre
2. Parcequ'il est en anglais (c'est moins long à écrire ... Quel paresseux je suis :P )
Merci
P.S. Si vous avez besoin du code contactez-moi au gabars@live.ca
je fais présentement un programme semblable à cmd.exe de Windows pour mon plaisir, mais il ne fonctionne pas tout à fait.
#include <iostream>
#include <windows.h>
int main
{
char[50] inst=NULL; // L'instruction (ex: help ou shutdown/s dans cmd.exe .
bool exit=false; //Booléen qui détermine si la boucle continue ou pas.
while(!exit) //tant que "exit" est faux.
{
cout <<"...";
cin <<"inst"; //Demande à l'utilisateur une instruction
if(inst==exit)
{
cout << "bye";
exit=true;
}
else if ...
...
...
}
return 0
}
Mon programme me fait tout jusqu'au if , il ne fait que me renvoyer le cout et le cin du début encore et encore, il ne ferme pas , il n'écrit pas, il ne fait que les deux lignes en souligné dans le code.
Si quelqu'un sait ce qui cloche dans ce code s.v.p me le dire
NOTE:Ceci n'est pas le vrai code mais en gros c'est pareil , si je n'ai pas mis le vrai code c'est pour:
1. Pour ne pas que tout le monde puisse le prendre
2. Parcequ'il est en anglais (c'est moins long à écrire ... Quel paresseux je suis :P )
Merci
P.S. Si vous avez besoin du code contactez-moi au gabars@live.ca
A voir également:
- C++ programme semblable a cmd.exe de Windows
- Cmd.exe - Guide
- Programme demarrage windows - Guide
- Clé de produit windows 10 gratuit - Guide
- Montage video windows - Guide
- Windows ne démarre pas - Guide
16 réponses
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
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.
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;
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
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
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
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 >> ...
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...
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.
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
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 ;-)).
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
Wow!! ça marche! Merci... quelle erreure stupide... je n'aurais pas dû arrêter mon cours en plein milieu :)
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() ?
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; }
?