Parameter vom Programmaufruf (z.B. sleep 10) als Variabel definieren

Azi

Erfahrenes Mitglied
Ich bin ein Anfänger in Sachen C. Ich möchte gerne den in der Konsole angegebenen Parameter, z.B. die Zahl 12, als Variabel definiert haben. Also:

datei:

#include <stdio.h>
int main(){
int i;
i = *parameter*;
printf ("Der Parameter ist %d", i);
return 0;
}

eingabe in der konsole: programm.exe 12
ausgabe: Der Parameter ist 12

Da ich ein Anfänger bin, könnt ihr mir den gesamten Code meines Beispiels verwenden?
Ich sag schonmal danke!
 
Wenn du main anders definierst gehts :
Code:
int main(int argc, char** argv)
{
int i;
/* argc ist die Anzahl an übergebenen argumenten */
printf("%i: Argumente übergeben \n",argc  );
/* argv ist ein Vektor mit strings (char*) die Strings */
for (i=0;i<argc;i++)
  printf("Argument %i: %s \n", i , argv[i]);

return 0;
}
 
Wie bekomme ich denn das letzte Argument herausgefiltert? also nur die Zahl 12 und nicht den Programmnamen?
 
Sorry, hat sich erledigt!
Dafür hab ich eine nächste Frage:
Unter Windows XP gibt es ja leider nicht mehr den sleep-Befehl. Daher dachte ich mir "mach doch mal selber" und fing mit dem programmieren an. Jetzt geht das aber nicht. Hier der Code:
Code:
#include <stdio.h>
#include <time.h>

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

	clock_t start;
	int pause;
	int i;
	i=argv[1];
	pause=i*CLOCKS_PER_SEC;
	start = clock();
	while (clock() < start+pause)
		;

	return 0;
}

Wieso geht das nicht?
 
Zuletzt bearbeitet:
Hy!

Warum sollte es unter XP den Sleep() Befehl nicht mehr geben
Code:
#include <Windows.h>

int main( int argc, char *argv[]) {
/*....*/
Sleep(400);
/*...*/
}
funktioniert problemlos, du musst das 's' nur groß schreiben.

Und zu deinem Code:
Als erstes fällt mir nur auf, das du nicht das übergebene Argument verwendest, sondern die Adresse des Strings. Probier mal:
Code:
...
i = atoi( argv[1]);
...
atoi() ist in stdlib.h

mfg
uhu01
 
Zuletzt bearbeitet:
Ich meinte den sleep-Befehl für den DOS-Emulator. Ich wusste garnicht, das es ihn auch unter C gibt! Aber dennoch klappt es nicht so ganz...

Code:
#include <stdio.h>
#include <Windows.h>

int main (int argc, char** argv) {
    
    if(argc == 1){
                  printf("\n\nCopyright Alexander S. Azim");
                  printf("\nSleep ist ein Befehl, um eine bestimmte Zeit zu pausieren.");
                  printf ("\n\n\tsleep.exe [Zahl]\n\n");
                  printf ("\t[Zahl] Zahl in Sekunden\n");
                  printf ("\t       Beispiel: sleep 10\n");
                  printf ("\t       Es werden 10 Sekunden gewartet\n");
                  }
    else {

	    Sleep(argv[1]);

        }
	return 0;
}

argv[1] wird als eine große Zahl interpretiert, die nicht dem übergebenen Parameter entspricht...
 
Hy!

Du hast wieder den gleichen Fehler wie oben gemacht, du hast die Adresse des Strings im Speicher, und nicht den String (bzw. Zahl) selbst verwendet. Verwende einfach atoi() dann funktioniert es.

mfg
uhu01
 
Vielen lieben Dank!
Jetzt funktioniert es auch!
Code:
#include <stdio.h>
#include <Windows.h>

int main (int argc, char**argv) {
    
    int i;
    
    if(argc == 1){
                  printf ("\nsleep for XP v. 1.0");
                  printf ("\nCopyright Alexander S. Azim");
                  printf ("\nSleep ist ein Befehl, um eine bestimmte Zeit zu pausieren.");
                  printf ("\n\n\tsleep.exe [Zahl]\n\n");
                  printf ("\t[Zahl] Zahl in Sekunden\n");
                  printf ("\t       Beispiel: sleep 10\n");
                  printf ("\t       Es werden 10 Sekunden gewartet\n");
                  }
    else {
       i =atoi(argv[1])*1000;
	    Sleep(i);
        }
	return 0;
}
Falls ihr XP benutzt, könnt ihr die sleep.exe einfach downloaden und in euer system32-Verzeichnis kopieren! Dann steht euch der Befehl auch zur Verfügung!
 

Anhänge

moin


Falls ihr XP benutzt, könnt ihr die sleep.exe einfach downloaden und in euer system32-Verzeichnis kopieren! Dann steht euch der Befehl auch zur Verfügung!
Warum wollte das jemand tun?
Und welchen Sinn hat das Programm?


mfg
umbrasaxum
 
Zurück