2017-02-01 4 views
-1

방금 ​​C를 배우는 과정을 시작했고 명령 줄 인수 문제로 부딪 혔습니다. 할당은 다음과 같습니다 (더 많은 내용이 있지만 처음에는 명령 줄 인수에 대한 부분입니다).
- 프로그램에서 단일 음수가 아닌 단일 명령 줄 인수를 받아 들여야합니다.
- 프로그램이 명령 줄 인수없이 또는 하나 이상의 명령 줄 인수없이 실행되면 프로그램에서 사용자가 선택한 오류 메시지를 인쇄하고 1을 반환해야합니다.
- 다음과 같이 가정 할 수 있습니다. 사용자가 명령 줄 인수를 제공하면 음수가 아닌 정수 (예 : 1)가됩니다. 그것이 실제로 숫자인지 확인할 필요가 없습니다. 명령 줄 인수 조건 pset2 caesar

그래서이 코드를 내놓았다 :

#include <stdio.h> 
#include <cs50.h> 
#include <string.h> 


    int main(int key, string plain[]) { 

     if (key < 0 || plain[key] > 1) 
     { 
      printf("error\n"); 
      return 1; 
     } 
     else 

등 ... 코드가 계속됩니다.

이제 여러 가지를 시도했지만 wall.The 컴파일러에서 실행중인 if 조건을 받아들이고 싶지 않아요, 포인터와 정수 사이의 비교 오류가있다 배정 목록에있는 굵게 표시된 조건을 나타냅니다. 그래서 나는 명령 행 인자의 argv 부분이 사용자가 넣은 문자열의 배열이라는 것을 이해했다. 그래서 나의 생각은 사용자가 하나 이상의 문자열을 주었을 때 오류 메시지를 주어야한다는 것을 컴파일러에게 알려주기 위해서였다. 그래서 나는 "plain [key]> 1)"이라고 표시됩니다. 아니면 커맨드 라인 논쟁에 대한 제 이해가 완전히 끝났습니까? 감사.

+2

'plain [key] '는'int'가 아닌'string' 일 것입니다. –

+0

'plain [key]'가 범위를 벗어난 것 같습니다. 'main'에 전달되는 매개 변수를 확인해야합니다. – Gerhardh

+0

C에는'string' 유형이 없습니다. 그게 뭐야? 'main'의 시그니처는'int main (int, int * [])'이거나 마지막 aprameter는 int **가 될 수 있습니다. – Olaf

답변

0

당신은 인수의 목적을 main으로 오해했습니다. 첫 번째 int 인수 (대개 argc)는 배열 인수의 항목 수입니다.

그리고 배열 인수 (일반적으로 argv)에는 프로그램에 대한 모든 인수 (실행 파일 이름 포함)가 텍스트로 들어 있습니다.

실행 파일이 foo라고한다면

, 당신은 foo 1 a bar로 호출로 될 것입니다 주에 대한 인수는 다음과 같습니다 프로그램이 하나의 인수를 허용해야하는 경우

int argc == 4 
char **argv => {"foo", "1", "a", "bar"} 

그래서, 그것은 argc == 2 있음을 보유해야합니다 argv[1]은 문자열에서 숫자로 변환해야한다는 인수입니다.

0

plain[key]plain 문자열 요소의 배열 (argv)의 키 요소에 액세스하십시오.

해당 배열의 크기는 키 (argc)로 표시됩니다.

그래서 당신이 원하는 것을 원인은 0 인덱스입니다 ',

if (key > 1) 
{ 
    //.. 
} 

는 또한 일반 마지막 요소는 key-1입니다.