2016-11-24 6 views
-1

Also versuche ich argc und argv in Caesars Chiffre zu verwenden, um das Programm mit nur [./ key; string] (z. B. ./ 13 Caesar) auszuführen. Ich habe es auf viele Arten versucht, obwohl ich zugeben muss, dass ich hier wirklich verloren bin. Ich dachte, ich sollte einfach main (void) benutzen und die Eingabe mit fgets machen, aber ich habe immer noch eine gewisse Neugierde: Wie könnte ich es mit "int main (int argc, char * argv [])" arbeiten lassen? Irgendwelche Hinweise, die du mir geben kannst?Verwenden von argc und argv in Caesar-Chiffre in C

Vielen Dank für Ihre Hilfe. Hier ist der Code mit den Stromausgängen:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <ctype.h> 




int main(int argc, char *argv[]) 
{ 
    int key; 
    int result; 
    char str[60]; 
    int k = 0; 



    printf("argc =%d\n", argc); 
    printf("argv =%d\n", argv); 
    printf("key =%d\n", key); 



if (argc != 2) 
    { 
     printf("You didn't enter a key.\n"); 
     return 1; 
    } 

else 
    { 
     int k = key % 26; 
     printf("k =%d\n", k); 

     if (k == 0) 
     { 
      printf("Invalid key.\n"); 
      return 1; 
     } 
    } 
} 

Ausgang:

$ ./ceasar 13 
argc =2 
argv =-13216 
key =0 
k =0 
Invalid key. 

Edit: Vorläufiger Antwort

int main(int argc, char* argv[]) 
{ 
    int i; 
    int key = atoi(argv[1]); 
    int result; 
    char str[60]; 

for (i = 0; i < argc; i++) 
{ 
    printf("argv[%d] = %s\n", i, argv[i]); 
} 

if (argc != 2) 
    { 
     printf("You didn't enter a key.\n"); 
     return 1; 
    } 
else 
    { 

     if (key == 0) 
     { 
      printf("Invalid key.\n"); 
      return 1; 
     } 
    } 
} 
+1

Sie haben Schlüssel varibale nicht initialisiert, versuchen Sie 'key = strtol (argv [1], NULL, 0)' '. Und warum hast du das gemacht? Printf ("argv =% d \ n", argv); '? – freestyle

+0

und überprüfen Sie argc, um sicherzustellen, dass genügend Argumente übergeben werden. Dann ist 'argv [2] 'dein Wort und du bist gut zu gehen. –

Antwort

1

Printing argv mit dem "%d" Spezifizierer ist nicht definiert Verhalten oder lesen Sie printf() 's Handbuch und verwenden Sie "%p".

Wenn Sie andererseits die Zeichenfolge drucken möchten, sollten Sie auf das entsprechende Element mit Array-Notation zugreifen. Zum Beispiel

printf("First Argument: %s\n", argv[1]); 

dies gilt für alle Argumente, stellte fest, dass argv[0] ist der Name der ausführbaren Datei, wie in der Befehlszeile aufgerufen.

Sie sollten auch vorsichtig sein, bevor Sie auf argv[1] zugreifen, um zu überprüfen, dass argc > 2, und immer überprüfen Sie das aktuelle Argument +!.

+0

Ich konnte ein bisschen davon lösen! Ich musste einfach "int key = atoi (argv [1]);" am Anfang deklarieren. Vielen Dank für Ihre Hilfe! –