Thread: trouble with arguments in main method

  1. #1
    Registered User
    Join Date
    Jul 2007
    Posts
    53

    trouble with arguments in main method

    Hi,

    I'm having some trouble with my C assignment. My assignment is based on an unix program that performs translations, deletions, uppercase, lowercase, and squeezing.

    My basic problem right now is my main method. I want have an output like this to access the various options listed above.
    a -u<test.txt> output.txt

    -a is used to run the program in gvim

    but I cannot get this output. I get a message saying: tr: invalid option --u

    Here's my code for the main method:
    Code:
    int main(int argc, char *argv[])
    {
    	int i;
    	FILE *fp;
    	char varchar;
    	char s[BUFSIZE];
    
    	if(argc > 2)  /*two arguments are allowed*/
    	{
    		fprintf(stderr, "usage:%s file....\n", argv[0]);
    		return 1;
    	}
    	if((fp = fopen(argv[0], "w"))==0)
    	{
    		perror("fopen");
    		return 1;
    	}
    	for(i=0; i<argc; i++)
    	{
    		if(argv[i][0] == '-')
    		{
    			if(argv[i][1] == 'u')
    				upper(s);
    			if(argv[i][1] == 'l')
    				lower(s);
    			if(varchar == 'h')
    				display(s);
    			else
    				fprintf(stderr, "invalid input\n");
    			    fprintf(stderr, "Please try 'tr -h' for help\n");
    		}
    		else
    			fprintf(stderr, "first argument problem\n");
    	}
    	fclose(fp);
    	return 0;
    }

  2. #2
    Hurry Slowly vart's Avatar
    Join Date
    Oct 2006
    Location
    Rishon LeZion, Israel
    Posts
    6,794
    I do not understand your explanaition
    do you plan to run the program as

    a -u<test.txt> output.txt

    in this case
    argc = 3
    argv[0] = "a"
    argv[1]="-u<test.txt>"
    argv[2]="output.txt"

    But your code shows something different

    ...
    Code:
    if(varchar == 'h')
    varchar is not initialized. This line is executed always (should it be?) with unpredictable results

    fprintf(stderr, "Please try 'tr -h' for help\n");
    this line is always executed also inside the codition branch if(argv[i][0] == '-')
    All problems in computer science can be solved by another level of indirection,
    except for the problem of too many layers of indirection.
    David J. Wheeler

  3. #3
    Registered User
    Join Date
    Jul 2007
    Posts
    53
    Quote Originally Posted by vart View Post
    I do not understand your explanaition
    do you plan to run the program as

    a -u<test.txt> output.txt

    in this case
    argc = 3
    argv[0] = "a"
    argv[1]="-u<test.txt>"
    argv[2]="output.txt"
    "a" - is what I use to run the program, I used a compiler from gvim

    argv[0]="-"
    argv[1]="u<test.txt>"
    argv[2]="output.txt"

    this is what I'm trying to do right now

    I actually have moved onto a new design in my code, so far its a bit successful
    Code:
    int main(int argc, char *argv[])
    {
    	int i;
    	char s[BUFSIZE];
    	FILE *fp;
    
    	if(argc != 2 && argc != 3)
    	{
    		fprintf(stderr, "usage:&#37;s file....\n", argv[0]);
    		return 1;
    	}
    	
    	for(i=1; i<argc; i++)
    	{
    		if(argc == 2)
    		{
    
    			if(strcmp(argv[1], "-l") == 0)
    			{
    				lower(s);
    			}
    			else if(strcmp(argv[1], "-u") == 0)
    			{
    				upper(fp);
    			}
    			else
    			{
    				 fprintf(stderr, "ok\n");
    			 }
    		 }
    		 else
    			 fprintf(stderr, "ok\n");
    	}
           return 0;
    }

  4. #4
    Hurry Slowly vart's Avatar
    Join Date
    Oct 2006
    Location
    Rishon LeZion, Israel
    Posts
    6,794
    argv[0] is a program name (with or without location depending on the environment)
    "-" to be reported as full argument should be delimited with space from the next part...

    have you tested your settings using simple program:
    Code:
    int main(int argc, char* argv[])
    {
       int i;
       printf("Number of args &#37;d\n", argc);
       for(i=0; i<argc;i++)
          printf("%d: <%s>\n", i,argv[i]);
    }
    ???
    All problems in computer science can be solved by another level of indirection,
    except for the problem of too many layers of indirection.
    David J. Wheeler

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. command line arguments
    By vurentjie in forum C Programming
    Replies: 3
    Last Post: 06-22-2008, 06:46 AM
  2. pointers
    By InvariantLoop in forum C Programming
    Replies: 13
    Last Post: 02-04-2005, 09:32 AM
  3. arguments in main
    By cdonlan in forum Linux Programming
    Replies: 3
    Last Post: 01-24-2005, 12:59 AM
  4. main function arguments
    By myjay in forum C++ Programming
    Replies: 2
    Last Post: 09-29-2003, 08:33 PM
  5. void or int for main?:)
    By bigtamscot in forum C Programming
    Replies: 13
    Last Post: 09-27-2001, 03:11 AM