2013-12-13 3 views
1

내 문제를 휴식 내가 문자 비교는이 특정 코드에서 어떻게 작동하는지 정말 모르겠어요이다문자 c의 비교 및 ​​여기

  • 나는 "C"를 입력하면 는, 출력은 다음과 같습니다 작업, 작동하지 않는, 내가 무엇을 입력하면
  • 을하지 아니라 가공 : 작동하지,하지-하지 않은 작업입니다.

제 질문은 이처럼 문자를 비교할 수 있습니까, 아니면 strcmp()을 사용해야합니까? break도 어떻게 작동합니까?

추신 : 다른 답변과 자습서를 검색했지만 다소 문제가 있습니다. 질문에 대한

+0

'not-not-working'은'if'에서 벗어나기 때문에 항상 표시됩니다. 첫 번째'if' 다음에';'를 넣으십시오. PS :'return 0'도 잘 작동 할 것입니다. – Tico

+0

코드에서 무슨 일이 벌어지고 있는지 더 잘 알 수 있도록'scanf '의 반환 값뿐만 아니라'c'도 출력 할 수 있습니다. – danfuzz

+0

예, 이미 초기화되었음을 나타냅니다. – Michael

답변

1

직접 답변 :

나는 ==와 문자를 비교할 수 있습니까?

예.

break의 작동 방식은 무엇입니까?

breakwhile 루프 내에서 루프가 즉시 종료됩니다.

3

입력 버퍼에 문자가있는 한 scanf가 반환됩니다. Enter 키를 누르기 전에 버퍼가 플러시되지 않습니다.

버퍼가 비어 있거나 break 문을 누를 때까지 루프가 실행됩니다.

에 코드를 변경 :

int main (int argc, char * argv[]) 
{ 
    char c[BUFSIZ]; 

    while(1){ 
    scanf("%c",c); 
    fprintf(stderr,"Input was: '%c'\n",c[0]); 
    if(c[0] == 'c') 
      printf("working\n"); 
    else 
    { 
      printf("Not working\n"); 
      break; // This will exit the while loop if the character is not 'c' 
    } 
    printf("not-not-working\n"); // This will always print on every iteration 
    } 
    return 0; 
} 

출력을 제공합니다, + [ENTER] 'C'를 입력 할 때 :

c 
Input was: 'c' 
working 
not-not-working 
Input was: ' 
' 
Not working 

당신은 대신 scanf와의 sscanf를 사용하여이 예를 해결할 수 있고, 첫 번째 문자 인 c [0]을 확인하면됩니다.

+0

예, 도움이되었습니다. 지금은 이해. 감사합니다 – Michael

+0

좋은 직장; 질문에보고 된 결과가 프로그램이 생성해야하는 결과와 일치하지 않는다는 것과 의견을 제시하기 위해 코드를 컴파일해야한다는 사실에 동의합니다. 또한 입력을 울리는 좋은; 이는 코드 디버깅을위한 매우 강력한 기술입니다. 프로그램이 실제로보고있는 것보다 실제로 무엇을보고 있는지 알려줍니다. 차이 (여기서는 개행)는 종종 프로그램을 이해하는 데 중요합니다. –

+0

감사합니다. 여기에있는 트릭은 sscanf를 사용하고 첫 번째 문자를 확인하는 것입니다. 나는이 방법으로 커맨드 라인 인터페이스를 구현하는데 정말로 편안하지 않고, 모든 것을 위해 gengetopt를 선호한다. [GenGetOpt] (http://www.gnu.org/software/gengetopt/gengetopt.html) – Trygve

0

scanf를 사용하여 문자를 읽는 중입니다. 'c'키를 누르면 scanf가 입력을 받아들이도록 enter를 누릅니다. 이제 버퍼에 2 문자가 있습니다.

첫 번째 반복에서 c의 값은 'c'이고 '작동'을 인쇄 한 다음 블록에서 벗어나 'not-not-working'을 인쇄합니다. 두 번째 반복에서 c의 값은 '\ n'이며 'c'와 같지 않으므로 else 블록으로 이동하여 '작동하지 않음'을 인쇄합니다. 그런 다음 break는 while 루프를 종료합니다.

scanf가 c를 읽을 때 'cccccccccccc'를 누르면 'c'의 발생 횟수만큼 '작동하지 않음', 'not-not-working'이 인쇄됩니다.

편집 :

주, 언론과 당신이 다음 사이에 공백없이 C의 많음이 입력 누를 때까지 C를 누릅니다.

0

scanf("%c", &c)c<Enter>을 2 개의 개별 문자로 스캔합니다.

일반적으로 키보드 I/O는 버퍼링됩니다. 따라서 scanf()c<Enter>까지 아무 것도 보지 않습니다. scanf() 첫 번째 패스에서는 c을, 두 번째 패스에서는 <Enter> (일명 \n)을 읽습니다. scanf(" %c", &c)으로 변경하면 먼저 \n을 포함하여 선행 공백을 스캔하고 버립니다.

변경

scanf("%c", &c); 

char c; 
scanf(" %c", &c); 

Q

에 :이 같은 문자를 비교하거나 내가) (을 strcmp를 사용해야 할 수 있습니까?
A : 예, 게시 된 내용과 비교할 수 있습니다 cchar입니다. strcmp()은 필요하지 않습니다.

Q : 어떻게 작동합니까?
A : 현재 for/while/do 루프 또는 switch 문을 종료하고 다음 문으로 진행하십시오.

0

당신의 나는, 당신은 완전히 그것을 리어, 그주의해야 기능 "는 scanf가"말하고 싶은 above.what 아마 코드 아래는 것입니다 ~ 사람들이 응답 한이 개 질문 관심 :

while(1) 
{ 
    scanf("%d",&a);  //d is int type 
    printf("%c",c); 
} 

당신은 charater를 입력, 당신은 왜 출력을 설명 할 수 있습니까?