2017-11-08 24 views
2

"임의"를 입력하면 1에서 6 사이의 임의의 숫자를 생성하는 짧은 C 코드를 작성해야합니다. "exit"또는 "quit"을 입력하면 프로그램이 종료되어야합니다. "quit"과 "exit"는 작동하지만 "random"을 입력하면 아무런 반응이 없습니다.if 문자열이있는 문이 C에서 비교

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

int main() { 
    printf("enter your command"); 
    char input[100]; 
    fgets(input, 100, stdin); 

    if (strcmp(input, "quit") == 0){ 
     exit(0); 
    } else if (strcmp(input, "exit") == 0) { 
     exit(0); 
    } else if (strcmp(input, "random") == 0) { 
     srand(time(NULL)); 
     int random_number = rand() %7; 
     printf("%d\n",random_number);  
    } 
    return 0; 
} 
+0

하나의 간단한 단계는'다른 {의 printf를 추가하는 것입니다 만 다른 사람뿐만 아니라 일치하지 않는 것을 증명 (줄 바꿈을 처리하지 않고) 그 것이다 변경 ("응? [% s] \ n", 입력); }'결국, 무슨 일이 일어나고 있는지를 보여줄 것입니다. 또한,'exit'도'quit' 비교도 작동하지 않습니다; 프로그램이 실패하면 자동으로 종료됩니다. printf ("quit [% s] \ n", input);를'quit'의'exit (0) '전에 추가하고'exit'와 마찬가지로 추가 할 수 있습니다. 디버거로 코드를 실행하면 이것을 볼 수도 있습니다. –

+0

스택 오버플로에 오신 것을 환영합니다. 여기서 '감사합니다'라고 말하면 가장 좋은 방법은 위의 좋은 질문과 유용한 답변 (충분한 답변을 얻으려면 명을 얻은 것임)이며, 질문에 대한 가장 유용한 답변을 수락하면됩니다. (이는 또한 평판에 대한 귀하의 에 약간의 도움이됩니다). [정보] 페이지 및 [질문은 어떻게합니까? 여기에 있습니까?] (http://stackoverflow.com/help/how-to-ask) 및 [내 질문에 대한 대답은 무엇을해야합니까? ?] (http://stackoverflow.com/help/someone-answers) –

답변

4

당신은 fgets에 의해 판독 된 문자열에 추가 할 수있는 새 줄 문자 '\n'을 제거해야합니다.

char input[100]; 
input[0] = '\0'; 

if (fgets (input, 100, stdin)) 
{ 
    input[strcspn(input, "\n")] = '\0'; 
} 

예를 들어이 선언

int random_number = rand() %7; 

의 이니셜 [0, 6] 범위의 숫자를 생성하는 것이 고려. 당신이 범위 [1, 6] 필요한 경우

int main(void) 
+0

범위와 영리한'strcspn'의 좋은 점! – sidyll

3

귀하의 fgets 호출이 삽입 명령을 읽고처럼 다음 초기화가

int random_number = rand() %6 + 1; 

과 같아야합니다 그리고 C 표준에 따라 매개 변수가없는 함수 main 선언해야한다 플러스 끝에있는 개행 문자. 따라서 개행 문자와 비교하거나 다른 입력 방법 (예 : scanf을 사용하여 공백을 처리하거나 개행 문자를 직접 삭제하는 등)을 선택해야합니다.

strcmp(input, "quit\n") == 0 
strcmp(input, "exit\n") == 0 
strcmp(input, "random\n") == 0 

처음 두 명령에서는 알지 못했지만 테스트를 통과하지 못했습니다.

마지막으로 else을 추가하여 일치하지 않는 항목을 잡을 수도 있습니다.

/* ... */ 
} else { 
    printf("unknown command\n"); 
} 

예를 scanf를 사용하여 :

char input[101]; 
scanf(" %100s", input); /* discards any leading whitespace and 
         * places the next non-whitespace sequence 
         * in `input` */ 
+0

고맙습니다. 내 친구 :) 그리고 임의의 숫자로 내 실수를 알았기에 명성을 얻었습니다. 실제로 1에서 6 사이의 난수를 얻으려고합니다. – JangoCG