2012-10-13 5 views
0

나는 지금까지 프로그램의 주요 기능 (지금까지 베어 본 기능)을 작성 중이다. 지금까지는 "end"명령 만 포함 시켜서 프로그램을 종료했다. 명령이 아닌 다른 것이 입력 될 때마다 오류 메시지가 출력됩니다. 그러나 루프 내에서 더 많은 명령을 입력 했으므로 다른 것을 인식하지 못하는 것 같습니다. 저는 계수와 지수를 입력하도록 사용자에게 프롬프트 한 후 다항식을 만드는 프로그램을 작성하고 있습니다.내 프로그램이 어떻게 다른 명령을 인식하지 못합니까?

명령은 adc (계수 명령 추가)이며 공백 뒤에 계수를 나타내는 정수와 지수를 나타내는 다른 정수가있는 다른 공백을 추가해야합니다.

예 : ADC 4 5 출력 : 입력의 특정 종류의 테스트 strcmp(buf,"adc %d %d") : 4 배^5

int main(void){ 
    char buf[5]; //Creates string array 
    unsigned int choice; 
    printf("Command? "); // Prompts user for command 
    fflush(stdout); 
    gets(buf); //Scans the input 

    while(strncmp(buf, "end", 3) != 0) //Loop that goes through each case, so long as the command isn't "end". 
    { 
     switch(choice){ 
     //Where the other cases will inevitably go 
      if((strcmp(buf,"adc %d %d"))== 0){ 
      } 
     break; 
      default: 
       printf("I'm sorry, but that's not a command.\n"); //Prints error message if input is not recognized command 
    fflush(stdout); 
       break; 
     } 
     printf("Command? "); //Recycles user prompt 
     fflush(stdout); 
     gets(buf); 
    } 
    puts("End of Program."); //Message displayed when program ends 
} 
+1

'gets (buf)'** 절대'gets'를 사용하지 마라. ** 맨 페이지조차도 말한다. 버퍼가 예상 입력에 비해 너무 작습니다. –

+1

스위치의 사례 설명은 어디에 있습니까? –

+0

왜 그렇게 까다로워 지나요? 그것은 항상 작동하는 것 같습니다. 그리고 내 스위치에 대한 내 인쇄 후 내 scanf 성명에 선택을 시도했지만 끝없는 루프에 계속. 솔직히 바꿀 수 없기 때문에 스위치에 더 이상 넣지 않아도되는 다양한 사례를 가지고 있습니다. – user1713221

답변

1

는이 같은 형식 문자열을 사용할 수 없습니다. strcmp은 문자 입력이 문자 그대로 입력되면 문자열 평등만을 알립니다 : "adc %d %d", adc 다음에 두 개의 정수가옵니다.

공백 문자를 토큰으로 사용하고 첫 번째 토큰을 strcmp으로 확인하여 수동으로 입력 문자열을 구문 분석해야합니다. adc 다음 숫자를 별도로 구문 분석.

switchcase 문이 표시되지 않습니다. choice을 어디에도 사용하지 않아서 switch을 삭제할 수 있습니다.

또한 gets을 사용하지 말고 fgets을 사용하십시오.

+0

fgets에 대한 인수가 너무 적다는 오류가 표시됩니다. – user1713221

+0

당신은 더 많은 인수가 필요합니다.'gets'에 대한 드롭 인 대체가 아닙니다 :'fgets (buf, 5, stdin)' – pb2q

+0

고마워요. . – user1713221

관련 문제