2017-02-18 3 views
0

사용자의 선택을 요구하는 메뉴 기반 프로그램입니다. 조건이 실행되지 않는 이유는 무엇입니까? 출력이 첨부됩니다. 는 사용자의 입력을 요청하는 프로그램을 만들기if 조건이 실행되지 않는 이유는 무엇입니까?

void main() 
{ 
    float a,b,ans=0;char ch,choice; 


    choice='y'; 

    while(choice=='Y'||choice=='y') 
    { 


     printf("Enter two numbers \n"); 
     scanf("%f %f",&a,&b); 
     printf("1.+for Addition\n"); 
     printf("2.-for subtraction \n"); 
     printf("3.*for multiplication \n "); 
     printf("4./for Division \n"); 
     printf("Enter your choice of operation \n"); 
     scanf("%c",&ch); 

     if(ch=='+') 
      ans=a+b; 
     else if (ch=='-') 
      ans=a-b; 
     else if(ch=='*') 
      ans=a*b; 
     else if(ch=='/') 
      ans=a/b; 
     else 
     { 
      printf("wrong choice entered\n"); 
     } 
     printf("Answer is %f \n",ans); 
     printf("Do you want to coninue (Y/N)\n"); 
     scanf("%c",&choice); 
    } 

    printf("program Terminated\n"); 
} 

출력 :

/* Enter two numbers 
    1010 
    22 
    1.+for Addition 
    2.-for subtraction 
    3.*for multiplication 
    4./for Division 
    Enter your choice of operation 
    wrong choice entered 
    Answer is 0.000000 
    Do you want to coninue (Y/N) 
    n 
    program Terminated 
*/ 

상기 출력 화면이다. 작업을 수행하지 않습니다.

답변

1

같이 선언되어야한다고 고려. 하지만 2 개의 숫자를 입력 한 후에는 엔터를 누릅니다. 컴퓨터는이를 새로운 입력으로보고 입력이 필요한 다음 적절한 변수에 입력합니다. 이 경우 변수 ch이고 +, -./또는 * 대신 ch는 "new line"값을가집니다. 표준 출력에 ch 값을 정수로 써 넣으려고하면 숫자가 10이됩니다. 새 행의 ASCII 문자입니다. 첫 번째 2 개의 숫자를 입력 한 후 getchar()을 추가하기 만하면 새 라인 기호가 수집되고 다음 scanf가 제대로 작동합니다.

그런데 이전 입력 결정을 입력 한 후 Enter 키를 누르면 프로그램이 제대로 작동하지 않으므로 마지막 입력에 동일한 문제가 발생합니다. scanf("%c",&choice); 이 부분에 대해서도 똑같은 작업을 수행하거나 단순히 % c 앞에 공백 문자를 남겨 둡니다.

1

는 다음

scanf(" %c",&ch); 
     ^^ 

scanf(" %c",&ch); 
     ^^ 

그렇지 않으면 다음 문자가 흰색 공백 ​​문자로 분리 할 수 ​​있습니다 읽어보십시오.

은 입력 제 2 개 숫자들은 변수 A 및 B에 배치 될 때 매개 변수없이 C 표준 함수 메인 따른

int main(void) 
0

scanf()는 후미 줄 바꿈을 사용하지 않습니다. 건너 뛴 scanf()는 사용자가 입력 한 이전 줄에서 줄 바꿈을 수신하고 예상대로 입력을 더받지 않고 종료합니다 ...

scanf()는 줄 바꿈이 약간 번거 롭습니다. 가능한 해결책은 fgets()를 사용하여 콘솔에서 행을 가져온 다음 sscanf()를 사용하여 수신 된 문자열을 구문 분석하는 것입니다.

마지막으로보다 정확한 대상 지정 솔루션은 마지막 scanf() 호출의 형식 문자열에 "% c"를 사용하는 것입니다. % c 형식 지정자는 자체 공백을 소비하지 않으므로 사용자가 입력 한 문자가 아닌 나머지 줄을 가져옵니다.

관련 문제