2016-04-18 12 views
-2

Hier ist ein Programm, das einige Informationen über meine selbst in diesem Programm drucken, wenn der Benutzer scannt/n seinen Namen und usw. drucken, aber wenn ich dieses Programm mit gcc laufen lasse, druckt nichts überhaupt. Ich muss die Parameter mit Argv und Argc scannen. wie kann ich das lösen?Drucken mit Argv und Argc

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#define SIZE 10 

int main(int argc, char** argv) 
{ 
    for (int i = 1; i < SIZE; i++) 
    { 
     if (argv[i] == ' ') 
     { 
      break; 
     } 
     if (argv[i] == 'n' || argv[i] == 'b' || argv[i] == 'f' || argv[i] == '?' && argv[i - 1] == '/') 
     { 
      switch (i) 
      { 

      case 'n': 
       printf("my name is : Daniel Zingerman \n"); 
       break; 
      case 'b': 
       printf("my birth date is: 2/11 \n"); 
       break; 
      case 'f': 
       printf("my favorite food is: ice cream \n"); 
       break; 
      case '?': 
       printf("the instruction of the program:"); 
       printf("There is a lot of parameters you can scan into the program:"); 
       printf("1. /n - printing the name"); 
       printf("2. /b - printing the birth date"); 
       printf("3. /n - printing the favorite food"); 
       printf("4. /? - printing the instructions"); 

       break; 
      } 
     } 


    } 
    system("pause"); 
    return(0); 
} 
+0

Was ist die erste Überraschung, die Sie mit diesem Programm erfüllen? – fluter

+0

Vergleichen Sie Strings mit strcmp aus string.h. Und Argc sollte Ihre FOR-Schleife begrenzen, nicht die GRÖSSE. – jboockmann

+0

was genau ist 'case'/n ': '? –

Antwort

0

Sie sollten argc Wert verwenden, um zu wissen, was das letzte Argument ist. Oder Sie sollten argv[i] == NULL testen. Sie scheinen nicht zu verstehen argv ist char **, also argv[i] ist ein char *, kein char.

Auch lernen, getopt() oder getopt_long() zu verwenden.

0

Die argv[] Array wird von dem Programmnamen in argv[0] erstellt und dann durch Leerzeichen getrennt die Befehlszeilenargumente
/n/b/f wird in argv[1], argv[2] & argv[3], nicht als eine einzelne 'string' in argv[1]

zurückgegeben werden,

Verwenden argc zu begrenzen, wie viele Elemente von argv[] Sie testen, so dass Sie nicht außerhalb der Grenzen gehen:
for (int i = 1; i < argc; i++) {

Jetzt müssen Sie prüfen, ob Sie gültige Befehlszeilenargumente haben:
if ((strcmp(argv[i], "/n") == 0) || ...

Wie Sie einen ganzzahligen Wert für die Falltests benötigen, verwenden Sie das zweite Element des argv [i]:
switch (argv[i][1]) {