Main Funktion



  • Ich bin komplett neu in C und desshalb hab ich mal eine frage....

    Kann mir einer von euch sagen wie ich eine Main Funktion deklariere die mehrere Optionen als Parameter annehmen kann???

    also zum Beispiel soetwas(versuch.c) -->

    ./versuch -h
    ./versuch -a 1 -a 2 -a 3 -o p
    ./versuch -a 1 -a 2 -a 3 -o M

    -h --> Hilfe
    -a --> lege Wert (-a x) x an
    p --> Ausgabe einer Datei
    M --> weiter Funktion...

    Was die Paramter aussagen ist ja eigentlich auch nicht wichtig!
    Ich versteh nur nicht wie man jetzt die Main() aufbaut??

    int main(char argc, ??????)??

    Kann mir da einer nen Tip geben?



  • hm musste selber mal was in der richtung schreiben, hier mal auszug aus dem prog was die deklaration bzw übergabe zeigt:

    #include <stdlib.h>												
    #include <stdio.h>
    #include <string.h>
    #include "dump.h"
    
    void main(int argc, char *argv[])
    {
    	char option[1],dateiname[40];   
    
    	if(argc==3)		    // Programm mit korrekte Anzahl Parameter aufgerufen ?
    	{					
    		strcpy(option,argv[1]);	
    		strcpy(dateiname,argv[2]);
            dump(option, dateiname); 
        }
    
    	else
    	{
    		printf("Parameteranzahl inkorrekt!\n");
    	}
    
    }
    

    unterprogramm in dem die parameter ausgewertet werden die eingeben werden:

    #include <stdlib.h>												
    #include <stdio.h>
    
    void dump(char option[1], char dateiname[40])
    {
        FILE *datei;	
        int n;
        unsigned char zeichen;   
        if( (datei=fopen(dateiname, "rb")) != NULL)
    	{
    		if(option[0] == '-')      //Parameter gültig?
    		{	
                do
    			{           
                    for(n=0; n<16; n++)   // Zeilenlänge
    				{		            
                        fread(&zeichen, sizeof(unsigned char),1,datei);
                        if(!feof(datei))   // Solange "end of file" nicht erreicht 
    					{					
                            switch (option[1])   // Auslese Art wird geprüft
    						{
                                case 'h':
                                printf("%x",zeichen);
                                printf(" ",zeichen);
                                break;
    
                                case 'o':
                                printf("%o",zeichen);
                                printf(" ",zeichen);
                                break;
    
                                case 'd':
                                printf("%d",zeichen);
                                printf(" ",zeichen);
                                break;
    
    							default:
                                fseek(datei,0,SEEK_END);    // Zum Ende der Datei "springen"
    							printf("Lese-Parameter Ungueltig!\n");
    						}				
    					}
    				}
                printf("\n");   //Zeilenende
    			}while(!feof(datei));   // Solange "end of file" nicht erreicht 
    		}
    		else 
    		{
    			printf("Lese-Parameter Ungueltig!\n");
    		}	
    	}
        else
    	{
            printf("Zu oeffnende Datei existiert nicht!\n");
    	}
    	fclose(datei);
    
    }
    

    vielleicht hilft dir das :p

    achja argc muß von typ int sein, da es die anzahl der zusatzparameter argv zählt.
    ohne zusatzparameter ist argc= 1;
    kann man wie man obene sieht zum testen benutzen ob einem programm die korrekte anzahl an parameter geben wurde.

    was die einzelnen zusatzparameter bewirken kann man per if abfrage gestalten...



  • Hi erstmal Danke!

    Und mit der Main Deklaration kannst du das Programm mit beliebig vielen Parametern aufrufen solange eine Fallunterscheidung für alle Parameter in deinem Programm geschrieben sind???



  • jup argv kann beliebieg viele zusatzparameter enthalten.

    Sobald die variablen erstmal von der main übergeben wurden, kannst du mehr oder weniger machen was du willst damit, ist wie bei nem unterprogramm.

    Die fallunterscheideung in meinen beispiel habe ich aus dem grund gemacht, weil man bei dem programm ne datei übergibt und per parameter bestimmt ob es hex oct oder dez ausgelesen werden soll.

    Im prinzip kannst du damit wie mit nem stinknormalen char feld arbeiten wenns übergeben ist.


Anmelden zum Antworten