2012-10-19 3 views
1

오늘 C 언어로 테스트하고 있었고, 난이 두 개의 작은 C 파일C 함수 호출 오류

main.c를

#include<conio.h> 
void testing(); 
int main() 
{ 
    testing(); 
    getch(); 
    return 0; 
} 

testing.c

#include <stdio.h> 

void testing() 
{ 
    char ch; 
    printf("Hello Testing\n"); 
    do{ 
     printf("Enter Character : "); 
     ch=getchar(); 
     printf("You Entered : %c\n",ch); 
     testing(); 
     }while(ch!='N'); 
} 

내가 직면하고 문제를 만든 사용자로부터 한 문자를 읽은 다음 두 번 반복합니다. 이유를 모르겠습니다.

output 
Hello Testing 
Enter Character : k //(i entered k) 
You Entered : k 

Hello Testing// why this is displayed twice?? 
Enter Character : You Entered :// i don't press any key and it moves to next iteration 

Hello Testing 
Enter Character : // here i can enter character again and it happens again twice 

Visual Studio 2012에서이를 준수했습니다.

답변

4

getchar()은 입력 버퍼에 개행 문자를 남겨 둡니다. 다른 getchar()을 사용하여 개행 문자를 먹을 수 있습니다.

ch=getchar(); 
getchar(); 

또는 식사는 scanf를 사용하여 최고의 공백 :

scanf(" %c", &ch); 

이전 \n이 무시 될 모든이 방법.

+0

감사합니다. :) 정말 많이 도움이되었습니다. – user1759804

2

문자를 인쇄 한 후 testing()에 다시 전화하십시오. 그러면 테스트를 반복하게됩니다. 이 줄을 빼면 괜찮을거야.

의도하지 않은 내용은 recursion입니다. 이것은 컴퓨터 프로그래밍의 열정적 측면이지만 의도 한 바가 아닙니다.

한 가지 더 입력을 확인하기 위해 입력을 눌렀을 때 입력 버퍼에 남아있는 개행 문자를 소비하는 두 번째 시간을 읽는 것이 좋습니다.

0

거기에 재귀가 있기 때문에 두 번 표시됩니다.이 함수는 무한 재귀를 수행한다고 가정합니다.

2

루프에서 testing() 함수를 반복적으로 호출하면 문제가 발생할 수 있습니다.