Übergabeparameterauswertung



  • hallo. ich hab hier nen kleines prog, bei dem man beim aufruf des programms auch übergabeparameter mit eingeben kann

    z.b.

    ascii 1 1

    der erste parameter steht für ausgabe auf dem bildschirm und der zweite für ausgabe in einer datei. wenn eine 1 übergeben wird, soll das ausgeführt werden und wenn eine 0 übergeben wird nicht. wird aber nur "ascii" aufgerufen ohne parameter, soll das programm manuell fragen

    ich hab das meiner meinung nach richtig alles gecodet und wenn ich auf den ersten parameter argv[1] zugreife, gibt er mir auch das aus, was ich eingegeben habe, aber als if abfrage wertet er mir das irgendwie nicht aus: sprich: obwohl ich ihm alles übergebe, macht er die manuelle abfrage, die nicht sein soll.

    schaut mal bitte drüber:

    #include "stdafx.h"
    #include "C:\Dev-Cpp\include\c++\3.3.1\backward\iostream.h"
    #include "Conio.h"
    //#include "C:\tools.h"
    
    int _tmain(int argc, char *argv[])
    {
    	int bild, datei;
    	char Name[255] = "0", Endung[4] = "0";
    	if ( argv[1] == "1" ) 
    	{
    		bild = (int) argv[1];
    	}
    	if ( argv[1] != "1" )
    	{
    		cout << "Soll eine Ausgabe auf dem Bildschirm erfolgen? ( 1 = Ja | 0 = Nein ): ";
    		cin >> bild;
    	}
    	if ( argv[2] != "1" ) 
    	{
    		cout << "Soll eine Ausgabe in eine Datei erfolgen? ( 1 = Ja | 0 = Nein ): ";
    		cin >> datei;
    	}
    	if ( argv[2] == "1" || datei == 1 ) 
    	{
    		datei = (int) argv[2];
    		cout << "Bitte Dateiname eingeben oder ENTER druecken: ";
    		int zahl = 0;
    		do
    		{
    			Name[zahl] = getche();
    			zahl++;
    		}while ( Name[zahl-1] != '\r' );
    		Name[zahl-1] = NULL;
    		cout << endl;
    		cout << "Bitte Dateiendung eingeben: ";
    		cin >> Endung;
    		Endung[3] = NULL;
    	}
    	//int ausgabe = ASCII(bild,datei,Name,Endung);
    	cout << ausgabe << endl;
    	return 0;
    }
    

    Alles was auskommentiert ist, gehört zwar zu dem Programm, ist aber nicht notwendig für die erfolgreiche erstellung. Die Funktion tools.h habt ihr nicht und desshalb hab ich se auskommentiert, genau wie die Funktion ganz unten.

    Ich danke euch schonmal.



  • vielleicht: '1' statt "1" 😉

    think \1: kann man c-strings mit opeartor== vergleichen? probier es doch mal mit strcmp()



  • MSS-Software schrieb:

    if ( argv[1] == "1" )
    

    Du solltest unbedingt nochmal das Thema Stringvergleich rekapitulieren.

    bild = (int) argv[1];
    

    Und so liest man auch keinen int aus einem String.

    Paar Tips zum Anlesen: strcmp,atoi,sscanf (C); istringstream- und string-Klasse (C++)

    wg. NULL sag ich jetzt nichts mehr.



  • aso
    ich kann also grundsätzlich strings nur mit strcmp() vergleichen

    ich dachte, dass ich das auch so machen könnte
    ich danke euch beiden und ich werd mir dann das nochmal genau anschauen



  • vielleicht solltest du auch nicht nach

    ...
    argv[1]==1
    ...
    

    sondern eher nach

    argv[2]==1
    ...
    

    fragen

    das array begint bei 0 und nicht bei 1

    deine parameter
    [cpp]
    argv[0] = parameter1 = programmname
    argv[1] = parameter2 = ascii
    argv[2] = parameter3 = 1
    argv[3] = parameter4 = 1 //diesen wertest du nicht aus



  • MSS-Software schrieb:

    ich kann also grundsätzlich strings nur mit strcmp() vergleichen

    C-Strings. Es gibt auch noch eine string-Klasse, die einen relativ natürlich aussehenden String-Typ darstellt, deren Instanzen kann man dann auch direkt vergleichen.

    ich dachte, dass ich das auch so machen könnte

    Strings gibts in C eigentlich nicht (direkt), man arbeitet immer nur mit ihrer Anfangsadresse im Speicher (also einem Zeiger auf char). Wenn du zwei "Strings" über == vergleichst, vergleichst du also in Wirklichkeit zwei Adressen, und es müsste schon mit dem Teufel zugehen, wenn die Adresse des Kommandozeilenparameters gleich der des im Programm abgelegten Stringliterals "1" ist. Effektiv musst du also jedes Element des Strings einzeln vergleichen, was z.b. von strcmp abgenommen werden kann. Die string-Klasse arbeitet intern auch so, ist aber meistens einfacher und sicherer zu bedienen.



  • MSS-Software schrieb:

    #include "C:\Dev-Cpp\include\c++\3.3.1\backward\iostream.h"
    

    Hallo? 🙄

    Geh mal zur FAQ, halt Ausschau nach iostream...


Anmelden zum Antworten