2011-03-20 2 views
0

코드가 매우 간단하지만 첫 번째 루프 이후에 fgets 메시지가 다시 표시되지 않는 이유는 무엇입니까? 나이는이다.Fgets C 프로그래밍을 한 번 실행 한 후에 무시됩니까?

int menu_option = 0; 
char name_temp[80] = ""; 
int age_temp = 0; 

while(menu_option != 9){ 

    //strcpy(name_temp,""); 

    printf("Type your name\n"); 
    fgets(name_temp, 80, stdin); 

    printf("\nType your age\n"); 
    scanf("%d", &age_temp); 

} 

은 (삭제 된 답변에서 이동) (그리고 이상하게 그것은 scanf("%s",&name_temp)와 함께 작동하지만 너무 áéíóúÇ, 공간과 같은 다른 문자를 잡기 위해 필요, 그래서 fgets에 더 좋을 것이다)

여러분의 답변에 감사드립니다.하지만 여러분이 내 질문을 이해하고, 내가 보낸이 코드를 테스트했다고 생각하지 않습니다. 입력하는 터미널에 나타나는 대신에 무시해도된다는 것을 알게 될 것입니다. 첫눈에 후 피.

내가 원했던 것은 첫 번째 루프 (while) 이후에 다시 돌아와서 사람의 이름을 물었고 프로그램을 사용하는 사람이 다시 입력해야한다는 것입니다. 하지만 그 대신 루프의 처음 이후에 아무 것도 입력하지 말고 fgets는 완전히 무시됩니다.

코드를 시도하고 내가 할 수있는 말을하시기 바랍니다.

나는 freopen 것을 시도하고 작동하지 않았다.

+0

질문 후에 [간단한 간단한 질문]을 입력 할 필요가 없습니다. –

+0

@user 참고 : markdown은 인용 부호 ('>'사용)와 코드 블록 (4 개의 공백 사용) 사이의 형식을 구분하며, 프로그래머는 대소 문자를 식별자 철자의 일부로 간주하므로 "Fgets"는 "fgets"와 동일합니다. – dmckee

+0

작동하지 않는 대답을 수락해서는 안됩니다. –

답변

-1

stdin을 이진 모드로 열어야합니다. 이 작업을 수행하려면 freopen(NULL, "rb", stdin)을 사용하십시오.

자세한 내용은 C read binary stdin을 참조하십시오.

2

fgets 줄을 읽습니다. 즉, \n 문자에 도달 할 때까지 stdin을 읽습니다.

scanf\n 문자를 stdin으로 남겨 둡니다.

그런 다음 fgets 빈 줄을 읽습니다.

+0

OP가 요구하는 것이 아닌 것 같습니다. –

+0

@MihranHovsepyan이게 그의 문제가 정확히 무엇인지 보입니다. –

3

내가 실행했을 때 루프를 통해 매번 "사용자 이름 입력"이 인쇄되었지만 입력시 scanf를 호출하는 '\ n'이 표시되기 때문에 입력을 기다리지 않았습니다 흐름. 이것은 일반적인 문제입니다. 한 가지 해결책은 getchar()을 삽입하는 것입니다. 그 줄 바꿈에서 그 줄 바꿈을 먹는다.

관련 문제