2012-02-10 4 views
1

나는이 간단한 코드를 작성했다. (실제로는 s, c 또는 t의 값에 따라 s, c 또는 t의 값을 입력으로 계산했다.)이 코드는 문장의 순서를 바꿀 때까지 잘 작동한다 ... ..... 하나는 잘 작동컴파일러가 컴파일하는 동안 명령문을 건너 뛰고 있습니까?

#include<stdio.h> 
#include<math.h> 
void main() 
{ 
char T; 
float x; 
printf("\nPress s or S for sin(x); c or C for cos(x); t or T for tan(x)\n\n"); 
scanf("%c", &T); 
printf("Enter the value of x: "); 
scanf("%f",&x); 

if(T=='s'||T=='S') 
{ 
    printf("sin(x) = %f", sin(x)); 
} 
else if(T=='c'||T=='C') 
{ 
    printf("cos(x) = %f", cos(x)); 
} 
else if(T=='t'||T=='T') 
{ 
    printf("tan(x) = %f", tan(x)); 
} 
} 

* 하지만을 .this * 최대한 빨리으로 배열 변경으로 컴파일러는 x의 값을 요청하고 문자의 T의는 scanf를 건너 뛰고 아무 것도 반환하지 않습니다 다음 ... 아무도 여기서 무슨 일이 일어나는지 설명 할 수 있습니까 ???

#include<stdio.h> 
#include<math.h> 
void main() 
{ 
char T; 
float x; 

printf("Enter the value of x: "); 
scanf("%f",&x); 
printf("\nPress s or S for sin(x); c or C for cos(x); t or T for tan(x)\n\n"); 
scanf("%c", &T); 
if(T=='s'||T=='S') 
{ 
    printf("sin(x) = %f", sin(x)); 
} 
else if(T=='c'||T=='C') 
{ 
    printf("cos(x) = %f", cos(x)); 
} 
else if(T=='t'||T=='T') 
{ 
    printf("tan(x) = %f", tan(x)); 
} 
} 
+0

'무효가()'의 주요 인 진입 점에 대한 올바른 서명이 아닙니다. 당신은'int main (void)'를 찾고있다. –

+0

하지만 이전 버전은 정상적으로 실행 중입니다 ... ?? – bluedroid

+0

int main()을 사용하더라도 두 번째 scanf를 건너 뜁니다. – bluedroid

답변

5

%c에 대한 scanf는 단일 문자 필요하기 때문이다 - '\n' 포함 어떤 문자를. float 값을 입력 한 후 "return"버튼을 누르면 I/O 시스템에서 float을 제공하고 "return"문자를 버퍼링합니다. scanf%c으로 전화하면 캐릭터가 이미 있으므로 즉시 제공됩니다.

는 문자열 버퍼를 만들고,이 문제를 해결하기 %s으로 scanf를 호출하고 다음과 같이 당신의 선택 문자로 문자열의 첫 번째 문자를 사용하려면

char buf[32]; 
printf("\nPress s or S for sin(x); c or C for cos(x); t or T for tan(x)\n\n"); 
scanf("%30s", buf); 
T = buf[0]; 
관련 문제