🌠별바다🌊 MYPI

🌠별바다🌊
접속 : 4810   Lv. 56

Category

Profile

Counter

  • 오늘 : 41 명
  • 전체 : 84327 명
  • Mypi Ver. 0.3.1 β
[고민거리] C언어 좀 도와주세요!!! (20) 2015/10/08 PM 02:36




int main(void){

char oper;

for (int i = 1; i <= 10; i++){

printf(">>Enter one of the following operations (+,-,*,/,^,!):");
scanf_s("%c", &oper);

switch (oper){
case '+':
add();
break;
case '-':
subtraction();
break;
case '*':
multi();
break;
case '/':
division();
break;
case '^':
exponential();
break;
case '!':
facto();
break;
default:
printf(">>ERROR: You enterd wrong operator\n");
}
}

return 0;
}


================================================================

연산하는 함수는 생략했어요..

1. 왜 case로 안들어가고 default로 바로가죠..?ㅠㅠ
2. default로 나온다음에 for 반복할때 scanf를 한번 무시하고 왜 두번째에 scanf가 작동되는지 모르겟어요
3. 1234567890 입력하면 1번만 default로 안가고 왜 10번 다 실행 되어버리는지도 모르겟어요

도와주세용ㅠㅠ

신고

 

글리젠 마이스터    친구신청

int i 를 먼저 선언해 주셔야 할거 같은데
선언 안하고 바로 써서 그런거 아닌가요

안아줘9    친구신청

for안에서 i 선언해주었습니다!
그거가 영향주나요? 해보고 올께요

공허의 집시데인저    친구신청

중간에 입력받은 oper를 출력하도록해서 값을 확인해보세요

안아줘9    친구신청

빈칸나오네요.. 왜지!?

사과조아    친구신청

switch 문은 정수만 된다고 들었는데 아닌가요?

이상한    친구신청

MSDN 찾아보니 char도 가능하네요..

Retaw    친구신청

char 도 정수입니다. 보통 케이스안에 쓰지 말라고 하는 것은 문자열 비교할 때 쓸까봐 그러는 거죠. 문자열은 배열이니 포인터를 비교하게 되서 오작동하게 됩니다.

ㅇㅁㅇ;;;;;;    친구신청

c안한지 꽤 오래되서 애매한데 switch문에 char대신 정수형으로 해보시구요 문자열 비교를 따로 하셔야 할듯요.
if else if문으로 짜셔보는것도 나쁘지 않을꺼같네요

꼼수    친구신청

스캔에프는 입력값 말고도 엔터도 하나의 문자로 인식해서 2번같은 문제가 발생하죠

때구니™    친구신청

1234567890은 버퍼에 찌꺼기가 남아서 그럴 겁니다
입력받은 후
fflush(stdin);나 getchar();을 넣으세요
아마 2번도 잡힐 것 같은데

오래되서 기억이 ㅎㅎ

판타스틱치킨    친구신청

http://penji.tistory.com/archive/20090822

싱글벙글    친구신청

scanf_s("%c", &oper); 에서

for문으로 반복을 하는 상황이기 때문에 + <enter>를 누르면 두개의 문자로 인식을 해요 .....
그래서 +일경우와 <enter>일 경우 두번 실행이되고 1234567890 <enter>를 누르면
1일경우 2 3 4 5 6 7 8 9 10 <enter> 까지 11번이 멈추지 않고 계속 반복해서 실행이 되는거에요

conio.h를 include 하고 getch() 함수를 사용하면 글자 하나면 입력 받고 <enter>없이 다음 처리를 하니까
참고하세요.

숲바라기    친구신청

swich 문구 아스키 코드 값을 직접 넣어보세요

그럼 될꺼 같은데

나라비엘    친구신청

scaf에서 입력받은 값 + enter의 enter값이 하나의 문자로 인식해서
뒤에있는 switch문에서 ' '을 입력받고 default로 달려가게 됩니당.

안아줘9    친구신청

헉...저는 교양수업 수준인데 처음보는 것들이 나와서ㅠㅠ 아.. 괜히 switch로 하려고했나

신경 써주신분들 감사합니다ㅎㅎ

매드★몬스터    친구신청

if로 해도 같은 결과가 나올겁니다

매드★몬스터    친구신청

버퍼에 엔터가 들어가서 생기는 문제입니다 fflush(stdin)을 써주세요!

호두까기 소년    친구신청

윗분들이 답해주셨네요. 입력받는 부분에서 엔터까지 인식해서 일어나는 일입니다.
fflush 라는 함수는 버퍼에 담긴 데이터들을 날리는 역할을하는 그런 함수인데.. 되도록이면 이런 방법보다는 OS 호환성을 생각해서 while (getchar() != '\n'); 이 코드를 더 많이 사용합니다. 따라서~

#include <stdio.h>

int main()
{
char oper;
int i;

for (i = 0; i < 10; i++)
{
printf(">>Enter one of the following operations (+,-,*,/,^,!): ");
scanf("%c", &oper);

while (getchar() != '\n');

switch (oper)
{
case '+':
printf("Add\n");
break;
case '-':
printf("Sub\n");
break;
case '/':
printf("Div\n");
break;
case '*':
printf("Mul\n");
break;
default:
printf("Nothing\n");
break;
}
}

return 0;
}

이런식으로 사용하시면 되겠네요~

라미네르    친구신청

받은 문자열을 trim해주던가 scanf말고 다른걸 쓰세요

IncomeCountry    친구신청

scanf 말고 getch() 또는 getche() <- 예제로 보시기엔 이쪽이 더 나을 듯.

(앞에 아마 #include <conio.h> 붙이셔야 할 거고...)
X