2012-02-23 2 views
3

아마 바보 같은 질문에 대해 미안하지만 루프를 조금 연습하고 싶다.이 아이디어를 가지고 나왔다. 기본적으로 루프를 넣거나하지 말 것을 권유한다. 에서, 그것은 당신에게 뭔가 할 것을 요구합니다. 문제는 내가 루프를 입력 한 후 scanf에 전달하기 전에 printf 문자열의 두 배를 인쇄하고 입력을 기다리는 것입니다. 나는 그것을 이해할 수 없다. 모든 도움을 환영합니다! 여기 코드는 다음과 같습니다C 루프는 문자열을 두 번 인쇄합니까? (scanf ("% c")를 사용하여)

#include <stdio.h> 

int main() 
{ 
    char check = 'a'; 
    char int_check = 'a'; 
    int b = 0; 
    printf("want to go in? [y or n]\n"); 
    scanf("%c",&check); 
    if (check == 'y') { 
     while (1){ 
      printf("Waiting: \n"); 
      scanf("%c",&int_check); 
      if (int_check == 'q'){ 
       printf("You're out, bye!\n"); 
       break; 
      }; 
     }; 
    } else if (check == 'n'){ 
     printf("You're not in, see ya!\n"); 
    }else { 
     printf("Please, type 'y' or 'n'\n"); 
    }; 
    return 0; 
} 
+0

... 컴파일하지 말아야합니다. –

+0

오류 오류인지 확실하지 않지만 중괄호 뒤에 세미콜론을 사용하면 안됩니다. –

+0

@DanFego 그것은 어리 석다 (또는 나는 적어도 그것을 찾는다). 그러나 그것은 중요하지 않다. 그것은 NOP 문 IIRC로 취급됩니다. –

답변

4

당신이 만약 입력 다음 터미널에 :

x 

첫 번째 루프는 x

두 번째 루프는 개행 문자를 볼 수 있습니다 볼 수 있습니다.

이 문제를 해결하는 가장 쉬운 방법은 sscanf와 getline을 사용하는 것입니다.

+0

고마워요! 내가 그걸 시도 할께 :) 미안, 네가 시간 낭비한다면 어리석은 질문 :) – WhiteEyeTree

+0

@WhiteEyeTree : 걱정 마세요. 어리석은 질문이 아니 었습니다. C를 배울 때 거의 모든 사람이 다룰 내용입니다.하지만 한 가지 명심해야 할 것은 추가 세미콜론은 불필요하며 프로그램의 의미를 바꿀 수 있다는 것입니다. 'if (condition) {...}'를 수행하고 마지막 세미콜론을 건너 뜁니다. 필요하지 않으며 조건문 뒤에 실행될 Null 문을 추가합니다. –

2

사용자가 enter 키를 기다리지 않고 바로 키보드에 응답하도록 프로그램을 변경하십시오. 그것은 입력 터미널의 속성을 변경해야하며, 일반적으로 라인 지향 입력보다 덜 복잡하고 덜 복잡합니다. This page은이를 수행하는 방법을 설명하며 다음과 같이 작동하도록 수정 된 코드는 다음과 같습니다.

#include <unistd.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <termios.h> 

struct termios saved_settings; 

void 
reset_term_mode(void) 
{ 
    tcsetattr (STDIN_FILENO, TCSANOW, &saved_settings); 
} 

int main() 
{ 
    tcgetattr(STDIN_FILENO, &saved_settings); 
    atexit(reset_term_mode); 

    struct termios term_settings; 

    tcgetattr(STDIN_FILENO, &term_settings); 
    term_settings.c_lflag &= ~(ICANON|ECHO); 
    term_settings.c_cc[VMIN] = 1; 
    term_settings.c_cc[VTIME] = 0; 
    tcsetattr(STDIN_FILENO, TCSAFLUSH, &term_settings); 

    char check = 'a'; 
    char int_check = 'a'; 
    int b = 0; 
    printf("want to go in? [y or n]\n"); 
    scanf("%c",&check); 
    if (check == 'y') { 
     while (1){ 
      printf("Waiting: \n"); 
      scanf("%c", &int_check); 
      if (int_check == 'q'){ 
       printf("You're out, bye!\n"); 
       break; 
      }; 
     }; 
    } else if (check == 'n'){ 
     printf("You're not in, see ya!\n"); 
    }else { 
     printf("Please, type 'y' or 'n'\n"); 
    }; 
    return 0; 
} 
관련 문제