SunQuest
           C Programming
 
Forums: » Register « |  User CP |  Games |  Calendar |  Members |  FAQs |  Sitemap |  Support | 
User Name:
Password:
Remember me
Go Back   Dev Shed ForumsProgramming LanguagesC Programming

Reply
Add This Thread To:
  Del.icio.us   Digg   Google   Spurl   Blink   Furl   Simpy   Y! MyWeb 
Thread Tools Search this Thread Rate Thread Display Modes
 
Unread Dev Shed Forums Sponsor:
Stop making mediocre tutorials.The best tutorials are video! Camtasia Studio makes it easy to create engaging, buzz-building screen videos at any size, in any popular format. Download the free trial!
  #1  
Old September 16th, 2002, 10:38 AM
C3P0's Avatar
C3P0 C3P0 is offline
Contributing User
Dev Shed Newbie (0 - 499 posts)
 
Join Date: Feb 2002
Posts: 302 C3P0 User rank is Private First Class (20 - 50 Reputation Level)C3P0 User rank is Private First Class (20 - 50 Reputation Level) 
Time spent in forums: 21 h 38 m 27 sec
Reputation Power: 7
What's wrong with this simple IF statement?

Sorry for the potentially stupid question, but I couldn't locate this basic info on the net.


A couple paremeters are passed to a program on command line. The second paremeter is in this case OH

Here's the code...

Code:
printf (argv[2]);

if (argv[2]=="OH") {
	printf ("\n\ndetected OH.  cool\n\n");
	exit(0);
} else {
	printf ("\n\ndidn't see OH.  crap\n\n");
	exit(0);
}



The program prints out OH to the screen, then says "didn't see OH. crap".

How am I mucking up this if statement?

Reply With Quote
  #2  
Old September 16th, 2002, 11:42 AM
Scorpions4ever's Avatar
Scorpions4ever Scorpions4ever is offline
Banned ;)
Dev Shed God 5th Plane (7000 - 7499 posts)
 
Join Date: Nov 2001
Location: Glendale, Los Angeles County, California, USA
Posts: 7,432 Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level) 
Time spent in forums: 4 Weeks 1 Day 22 h 29 m 51 sec
Reputation Power: 784
You can't compare strings with == in C. You have to use strcmp() for this.
Code:
#include <string.h>

printf (argv[2]);

if (strcmp(argv[2],"OH") == 0) {
	printf ("\n\ndetected OH.  cool\n\n");
	exit(0);
} else {
	printf ("\n\ndidn't see OH.  crap\n\n");
	exit(0);
}

Hope this helps!

Reply With Quote
  #3  
Old September 16th, 2002, 12:22 PM
C3P0's Avatar
C3P0 C3P0 is offline
Contributing User
Dev Shed Newbie (0 - 499 posts)
 
Join Date: Feb 2002
Posts: 302 C3P0 User rank is Private First Class (20 - 50 Reputation Level)C3P0 User rank is Private First Class (20 - 50 Reputation Level) 
Time spent in forums: 21 h 38 m 27 sec
Reputation Power: 7
Cool, strcmp() works good..

Is there a way to eliminate the if/else and just make this a if ( doesn't match arguemtns) { exit progrm } ?

I tried changing the ==0 to !=0 but then neither of the arguments were recognized (even though they were correct).

Reply With Quote
  #4  
Old September 16th, 2002, 12:27 PM
Scorpions4ever's Avatar
Scorpions4ever Scorpions4ever is offline
Banned ;)
Dev Shed God 5th Plane (7000 - 7499 posts)
 
Join Date: Nov 2001
Location: Glendale, Los Angeles County, California, USA
Posts: 7,432 Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level) 
Time spent in forums: 4 Weeks 1 Day 22 h 29 m 51 sec
Reputation Power: 784
Change || (or) to && (and) and you should be good to go.
Code:
if ((strcmp(argv[2],"OH") != 0) && (strcmp(argv[2],"IH") != 0))  {
	printf ("\nIncorrect location code.   Valid options: O, OH, IH, OL, or EX\n\n");
	exit(0);
} 

Of course, you probably want to add more && (strcmp(....) for the rest of the options EX, OL and O.

Reply With Quote
  #5  
Old September 16th, 2002, 07:21 PM
wayp wayp is offline
Junior Member
Dev Shed Newbie (0 - 499 posts)
 
Join Date: Sep 2002
Location: South Carolina
Posts: 0 wayp User rank is Just a Lowly Private (1 - 20 Reputation Level) 
Time spent in forums: < 1 sec
Reputation Power: 0
I hope this helps

Code:
#include <string.h>

int main(int argc, char **argv){

   if(argc != 3){ //1 || argc > 2){
      printf("\nWARNING: Incorrect usage!  Proper usage...\n");
      exit(1);
   }

   printf (argv[2]);

   if (!(strcmp(argv[2],"OH") == 0)){
      printf ("\n\ndidn't see OH.  crap\n\n");
      exit(1);
   }

   printf ("\n\ndetected OH.  cool\n\n");
}

Reply With Quote
  #6  
Old September 16th, 2002, 08:16 PM
Scorpions4ever's Avatar
Scorpions4ever Scorpions4ever is offline
Banned ;)
Dev Shed God 5th Plane (7000 - 7499 posts)
 
Join Date: Nov 2001
Location: Glendale, Los Angeles County, California, USA
Posts: 7,432 Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level) 
Time spent in forums: 4 Weeks 1 Day 22 h 29 m 51 sec
Reputation Power: 784
To avoid confusion here, C3PO's 2nd post on this thread was asking what was wrong with this code:
Code:
if (strcmp(argv[2],"OH") != 0 || strcmp(argv[2],"IH") != 0)  {
	printf ("\nIncorrect location code.   Valid options: O, OH, IH, OL, or EX\n\n");
	exit(0);
} 


Unfortunately he edited the post (and removed all the code) right when I posted my reply.

Reply With Quote
  #7  
Old September 17th, 2002, 11:40 PM
Optix Optix is offline
Contributing User
Dev Shed Newbie (0 - 499 posts)
 
Join Date: Jun 2002
Posts: 36 Optix User rank is Just a Lowly Private (1 - 20 Reputation Level) 
Time spent in forums: < 1 sec
Reputation Power: 7
Uhm if you put argv[2] wouldn't that just be comparing the character in argv index 2? (so wouldnt it be only 1 char)

Reply With Quote
  #8  
Old September 18th, 2002, 12:14 AM
Scorpions4ever's Avatar
Scorpions4ever Scorpions4ever is offline
Banned ;)
Dev Shed God 5th Plane (7000 - 7499 posts)
 
Join Date: Nov 2001
Location: Glendale, Los Angeles County, California, USA
Posts: 7,432 Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level)Scorpions4ever User rank is Major General (70000 - 90000 Reputation Level) 
Time spent in forums: 4 Weeks 1 Day 22 h 29 m 51 sec
Reputation Power: 784
Nope, argv is declared as char ** (or char *argv[] in some cases), which means it's a pointer to pointer to char (or pointer to array of chars if you like). So argv[2] points to the third char array (not 2nd char array, since arrays are zero based in C. However, this array is the second argument passed to the program, since argv[0] is the program name itself). If you want the 2nd char of the 3rd char array, then you could perhaps try argv[2][1].

Hope this helps!

Reply With Quote
Reply

Viewing: Dev Shed ForumsProgramming LanguagesC Programming > What's wrong with this simple IF statement?


Thread Tools  Search this Thread 
Search this Thread:

Advanced Search
Display Modes  Rate This Thread 
Rate This Thread:


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
View Your Warnings | New Posts | Latest News | Latest Threads | Shoutbox
Forum Jump


Forums: » Register « |  User CP |  Games |  Calendar |  Members |  FAQs |  Sitemap |  Support | 
  
 





© 2003-2008 by Developer Shed. All rights reserved. DS Cluster 4 hosted by Hostway