2016-11-24 23 views
-1

그래서 [[./ key; string] (예 : ./ 13 Caesar)으로 프로그램을 실행하기 위해 Caesars 암호에서 argc 및 argv를 사용하려고합니다. 나는 많은 방법으로 시도해 왔지만, 나는 정말로 여기에서 길을 잃었다는 것을 인정해야한다. 나는 main (void)을 사용하고 fgets로 입력을 요청해야한다고 생각했지만, 나는 여전히 "int main (int argc, char * argv [])"으로 작동하도록 만들 수 있을까? 네가 나 한테 줄 수있는 단서가 있니?C에서 시저 암호의 argc 및 argv 사용

도움 주셔서 감사합니다.

#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; 
     } 
    } 
} 

출력 :

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

편집 : 미정 않음

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

키 varibale을 초기화하지 않았습니다.'key = strtol (argv [1], NULL, 0)'을 사용해보십시오. 그리고 왜 그것을 했습니까? printf ("argv = % d \ n", argv);'? – freestyle

+0

및 충분한 인수가 전달되었는지 argc를 점검하십시오. 그러면 argv [2]는 여러분의 말이고 여러분은 잘 가게됩니다. –

답변

1

인쇄 argv"%d" 지정자 정의되지 여기 전류 출력을 갖는 코드는 행동 또는 printf()의 설명서를 읽고 "%p"을 사용하십시오.

문자열을 인쇄하려면 배열 표기법을 사용하여 적절한 요소에 액세스해야합니다. 예를

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

를 들어이 명령 줄에서 호출로 argv[0]는 실행 파일의 이름임을 지적, 모든 인수에 적용됩니다.

argv[1]에 액세스하기 전에 argc > 2을 확인하고 항상 현재 인수 +!를 확인하십시오.

+0

나는 그것의 조금을 해결할 수 있었다! 나는 처음에 "int key = atoi (argv [1]);"라고 선언해야했습니다. 도움 주셔서 감사합니다. –