-
February 26th, 2005, 06:55 PM
#11
First thing I will say is, in C++ you don't actually need to ever use a goto, and using it to loop is a bit underdevoloped IMHO. Do a look up on try and catch statements. They are what you use instead of goto's.
Second why don't use just use include <string>?
A nice way you can do that without your goto is.
Code:
#include <iostream>
#include <string>
int main()
{
string com1;
cout << "Enter a Command" << endl;
cout << "Enter help for list of commands" << endl;
cin.get(com1);
while(com != "exit")
{
if(com1 == "help")
{ cout << "commands" << endl;
cout << "cd" << endl;
cout << "ls" << endl;
cout << "exit" << endl;
}
else if (com1 == "ls")
{
cout << "bugreport" << endl;
cout << "landing" << endl;
cout << "watergate" << endl;
cout << "WOMDIRAQ" << endl;
}
else if (com1 == "cd ..")
{
cout << "/root:";
}
else if (com1 == "exit")
{
break;
}
else
{
cout << "Command not found" << endl;
}
cin >> com1;
}
}
-
February 26th, 2005, 10:29 PM
#12
Junior Member
riot,
maybe u overlooked this:
" if (com1 == "help");
{
cout << "commands" << endl;
cout << "cd" << endl;
cout << "ls" << endl;
goto root;
} "
there shouldn't be any semicolon after " if( /*condition*/ ) "otherwise the instruction following it won't get executed,i think.
also why not use a switch statement?
-
February 26th, 2005, 11:34 PM
#13
also why not use a switch statement?
switch only works for integers.
The reason that if(string == "astring") {...} does not work is because it is not actually comparing two strings. The identifier, "string," is actually a pointer to the first memory address of the character array, therefore you are comparing a pointer for equality with a character constant (String). Therefore, what you are saying is:
if the character pointer string is equal to "astring" then do something.
This will not evaluate to true because "astring" is not a character pointer.
Now I'm sure there are some false statements in the above, I'd be grateful if someone could try to explain what I've just said in more depth.
So basically, what the above means is that you have to use strcmp(...) in the string.h header file like sec_ware (I think it was) already said.
ac
-
February 26th, 2005, 11:45 PM
#14
Ok thanks for the explainations i did use what sec_ware said i should do and it compiles nice
and the first 2 parts work but the second part dosent even thow the code is exactly the same just with diffrent output i am going to put in some comments into my code then post it back and if some one could review it for me that would be great.
Here is my code i cant figure out why some of my code is off i have been working on it for a long thime and also thanks guys for helping me cuz i know i am not good at this codeing stuff an am probably becoming a pain by now. Also i put all most ever thing you need to know in the comments what works what dosen't description of what it is, and if any one wants the full code i will post it.
Tryed to make it as easy as i could to read in black and white but didn't do shouch a good job sorry.
Code:
#include <iostream.h>
#include <string.h>
using namespace std;
int main(int argc, char *argv[])
{
char com1[1024];
char com2[1024];
char comi2[1024];
char comi3[1024];
char comi4[1024];
char comi5[1024];
// i took out the first section because it works fine
root:// start of the unix box in
cout << "/root:";
cin >> com1;
if(strcmp(com1,"help")==0){ // tells you want commands their are
cout << "commands" << endl;
cout << "cd" << endl;
cout << "ls" << endl;
goto root; // brings you back to root so you will have a prompt
}
if(strcmp(com1,"ls")==0){ // lets you give the ls command
cout << "bugreport" << endl;
cout << "landing" << endl;
cout << "watergate" << endl;
cout << "WOMDIRAQ" << endl;
goto root; // same thing as befor
}
if(strcmp(com1,"cd../")==0){ // same thing as ls
goto rootd;
}
else{
cout << "BASH command not found:" << endl; // give you an error message if you use a nonlisted command
goto root;
}
rootd: // is the root dir that /root is keeped in
cout << "/:";
cin >> com2;
if(strcmp(com2,"help")==0){ // same thing as befor
cout << "commands" << endl;
cout << "cd" << endl;
cout << "ls" << endl;
goto rootd;
}
if(strcmp(com2,"ls")==0){ // same thing give you the list of what in the file
cout << "etc" << endl;
cout << "root" << endl;
cout << "home" << endl;
goto rootd;
}
if(strcmp(com2,"cd etc")==0){ // this is wear i have a problem i think this is
goto etc; // i think this is wear at least once i move from
} // the starting /root dir the cd command dosn't work
// no matter what you neter with cd it allways brings
etc: // you to the etc dir
cout << "/etc:";
cin >> comi2; // the varable that is used tell what command you put in
// i all so used an embedded if statmentto move up and down the dirs
if(strcmp(comi2,"ls")==0){ // this command works
cout << "passwd" << endl; // contents of etc
cout << "shadow" << endl;
}
if(strcmp(comi2,"cd../")==0){ // same as befor and this one works
goto rootd;
}
else{
cout << "BASH command not found:" << endl;
goto etc;
}
if(strcmp(com2,"cd root")==0){ // dose not work will bring you from the root
goto root; // dir to the etc and will give you the error message
} // command not found befor going into the stc dir
if(strcmp(com2,"cd home")==0){ // same as "cd root"
goto home; // I have stoped puting comments here because this is the farthest
} // I can go in the program and cant tell what works and what dosen't
//by trying it becuase i can get into thoes directories but their is
home: // a little bit more down at the bottom
cout << "/home:";
cin >> comi3;
if(strcmp(comi3,"help")==0){
cout << "commands" << endl;
cout << "cd" << endl;
cout << "ls" << endl;
}
if(strcmp(comi3,"ls")==0){
cout << "stu" << endl;
cout << "john" << endl;
}
if(strcmp(comi3,"cd../")==0){
goto rootd;
}
if(strcmp(comi3,"cd stu")==0){
goto stu;
}
stu:
cout << "/home/stu:";
cin >> comi4;
if(strcmp(comi4,"help")==0){
cout << "commands" << endl;
cout << "cd" << endl;
cout << "ls" << endl;
}
if(strcmp(comi4,"ls")==0){
cout << "JFK" << endl;
cout << "buglanding" << endl;
cout << "Area 54 landing" << endl;
cout << "UFO" << endl;
}
if(strcmp(comi2,"cd../")==0){
goto home;
}
else{
cout << "BASH command not found:" << endl;
goto stu;
}
if(strcmp(comi2,"cd john")==0){
goto john;
}
john:
cout <<"/home/john:";
cin >> comi5;
if(strcmp(comi5,"help")==0){
cout << "commands" << endl;
cout << "cd" << endl;
cout << "ls" << endl;
}
if(strcmp(comi5,"ls")==0){
cout << "bugreport" << endl;
cout << "Mexican ufo siteing" << endl;
cout << "Big Foot" << endl;
cout << "top secret" << endl;
}
if(strcmp(comi5,"cd../")==0){
goto home;
}
else{
cout << "BASH command not found:" << endl;
goto john;
}
if(strcmp(com2,"creator")==0){ // this command dose not work like all other in
cout << "This prorham was created by Norse" << endl; //root dir it brings you
cout << "You can distribute this program any way you want" << endl; // the etc dir
cout << "but you can not take credit for its creation thank you" << endl;
cout << "and have a good time playing" << endl;
}
else{
cout << "BASH command not found:" << endl;
goto rootd;
}
end:
cout << "something went wrong sorry" << endl; // this is just for the beggining
cout << "press any key then enter:" << endl; //that i cut out if you decide not
cin >> end; //to go further with your hack
}
return 0;
}
-
March 1st, 2005, 11:20 AM
#15
Junior Member
"/ the starting /root dir the cd command dosn't work
// no matter what you neter with cd it allways brings
// you to the etc dir "
this is because:
else{
cout << "BASH command not found:" << endl;
goto etc;
}
whatever mistake u enter will output the message and then goto etc.i'm assuming u meant to go to rootd?
" cin >> com2;"
cin will only read up to the first blank space,therefor if the user entered:
cd etc
or
cd whatever
it will be read as 'cd' only.to solve this use the cin.getline( ) function.cin.getline read all the characters typed until it's maximum is reached or until a newline is encounterd.i'd suggest replacing every cin in ur code with cin.getline.i think that should solve the problem.i've modified a part of ur code to illustrate what i meant.
#include <iostream.h>
#include <string.h>
int main(int argc, char *argv[])
{
char com1[1024];
char com2[1024];
char comi2[1024];
// i took out the first section because it works fine
root:// start of the unix box in
cout << "/root:";
cin.getline(com1,80);
if(strcmp(com1,"help")==0){ // tells you want commands their are
cout << "commands" << endl;
cout << "cd" << endl;
cout << "ls" << endl;
goto root; // brings you back to root so you will have a prompt
}
if(strcmp(com1,"ls")==0){ // lets you give the ls command
cout << "bugreport" << endl;
cout << "landing" << endl;
cout << "watergate" << endl;
cout << "WOMDIRAQ" << endl;
goto root; // same thing as befor
}
if(strcmp(com1,"cd../")==0){ // same thing as ls
goto rootd;
}
else{
cout << "BASH command not found:" << endl; // give you an error message if you use a nonlisted command
goto root;
}
rootd: // is the root dir that /root is keeped in
cout << "/:";
cin.getline(com2,80);
if(strcmp(com2,"help")==0){ // same thing as befor
cout << "commands" << endl;
cout << "cd" << endl;
cout << "ls" << endl;
goto rootd;
}
if(strcmp(com2,"ls")==0){ // same thing give you the list of what in the file
cout << "etc" << endl;
cout << "root" << endl;
cout << "home" << endl;
goto rootd;
}
if(strcmp(com2,"cd etc")==0){ // this is wear i have a problem i think this is
goto etc; // i think this is wear at least once i move from
} // the starting /root dir the cd command dosn't work
else{
cout << "BASH command not found:" << endl;
goto rootd;
}
// no matter what you neter with cd it allways brings
etc: // you to the etc dir
cout << "/etc:";
// the varable that is used tell what command you put in
cin.getline(comi2,80); // i all so used an embedded if statmentto move up and down the dirs
if(strcmp(comi2,"ls")==0){ // this command works
cout << "passwd" << endl; // contents of etc
cout << "shadow" << endl;
goto etc;
}
if(strcmp(comi2,"cd../")==0){ // same as befor and this one works
goto rootd;
}
else{
cout << "BASH command not found:" << endl;
goto etc;
}
return 0;
}
-
March 2nd, 2005, 02:34 AM
#16
xxxx123 thank you for your help I very much appreshate it.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
|