-
[혼잣말] C언어 괴수형님들 살려주세요 2012.04.20 PM 05:09
#include
int main(void)
{
int s;
char g;
printf("정수를 입력하세요 : ");
scanf("%d", &s);
switch( s / 10)
{
case 10 :
case 9 :
g = 'A' ;
break;
case 8 :
g = 'B' ;
break;
case 7 :
g = 'C' ;
break;
case 6 :
g = 'D' ;
break;
case 5 :
g = 'F' ;
break;
case 4 :
g = 'F' ;
break;
case 3 :
g = 'F' ;
break;
case 2 :
g = 'F' ;
break;
case 1 :
g = 'F' ;
break;
case 0 :
g = 'F' ;
break;
default :
printf("잘못 입력하셨습니다.\n");
break;
}
printf("%c 학점입니다.\n", g);
return 0;
}
연습문제를 푸는중인데 if else를 switch로 바꾸라그래서 변환하면서 잘모르겠는데..
현재 문제가 뭐냐면 0 ~ 100 을 제외하고는 잘못입력하셨습니다. 가 나와야하고
60점 이하는 F를 만들어줘야하는데
저런식으로밖에 못하겠습니다 거기다 -2를 입력하면 F학점이나옵니다...
아 ㅠㅠ 모르겠네요 이건...
댓글 : 9 개
- 구름나무
- 2012/04/20 PM 05:17
#include<stdio.h>
int main(void)
{
unsigned int s; // - 입력 없으므로 unsigned
char g = NULL; // 초기화 후 해당 case가 있을때만 값 대입.
printf("정수를 입력하세요 : ");
scanf("%d", &s);
if(s > 100) s = 100; // 101~109 도 10으로 나누면 10이므로 A가 나옴.
switch( int(s / 10))
{
case 10 :
case 9 :
g = 'A' ;
break;
case 8 :
g = 'B' ;
break;
case 7 :
g = 'C' ;
break;
case 6 :
g = 'D' ;
break;
case 5 :
case 4 :
case 3 :
case 2 :
case 1 :
case 0 :
g = 'F' ;
break;
// break;가 없으면 아래조건의 행까지 모두 수행함. 실행문이 같다면 몰아서 씀.
default :
printf("잘못 입력하셨습니다.\n");
break;
}
if(g!=NULL) printf("%c 학점입니다.\n", g);
// 범위 밖의 수가 입력되면 g는 NULL 초기화 그대로이므로 출력되지 않음.
return 0;
}
int main(void)
{
unsigned int s; // - 입력 없으므로 unsigned
char g = NULL; // 초기화 후 해당 case가 있을때만 값 대입.
printf("정수를 입력하세요 : ");
scanf("%d", &s);
if(s > 100) s = 100; // 101~109 도 10으로 나누면 10이므로 A가 나옴.
switch( int(s / 10))
{
case 10 :
case 9 :
g = 'A' ;
break;
case 8 :
g = 'B' ;
break;
case 7 :
g = 'C' ;
break;
case 6 :
g = 'D' ;
break;
case 5 :
case 4 :
case 3 :
case 2 :
case 1 :
case 0 :
g = 'F' ;
break;
// break;가 없으면 아래조건의 행까지 모두 수행함. 실행문이 같다면 몰아서 씀.
default :
printf("잘못 입력하셨습니다.\n");
break;
}
if(g!=NULL) printf("%c 학점입니다.\n", g);
// 범위 밖의 수가 입력되면 g는 NULL 초기화 그대로이므로 출력되지 않음.
return 0;
}
- 사야오빠
- 2012/04/20 PM 05:20
#include <stdio.h>
int main(void)
{
int s;
char g;
printf("정수를 입력하세요 : ");
scanf("%d", &s);
switch(s / 10)
{
case 10 :
case 9 :
g = 'A' ;
break;
case 8 :
g = 'B' ;
break;
case 7 :
g = 'C' ;
break;
case 6 :
g = 'D' ;
break;
case 5 :
case 4 :
case 3 :
case 2 :
case 1 :
case 0 :
g = 'F' ;
break;
default :
printf("잘못 입력하셨습니다.\n");
break;
}
if (s >= 0 && s <= 100)
{
printf("%c 학점입니다.\n", g);
}
return 0;
}
int main(void)
{
int s;
char g;
printf("정수를 입력하세요 : ");
scanf("%d", &s);
switch(s / 10)
{
case 10 :
case 9 :
g = 'A' ;
break;
case 8 :
g = 'B' ;
break;
case 7 :
g = 'C' ;
break;
case 6 :
g = 'D' ;
break;
case 5 :
case 4 :
case 3 :
case 2 :
case 1 :
case 0 :
g = 'F' ;
break;
default :
printf("잘못 입력하셨습니다.\n");
break;
}
if (s >= 0 && s <= 100)
{
printf("%c 학점입니다.\n", g);
}
return 0;
}
- 김생선님
- 2012/04/20 PM 05:22
아 두분 감사드립니다 !!
- Inspiraton-
- 2012/04/20 PM 05:22
흔히 ..많이들 하는 예제인데..
if else가 안되는 이유는 보기에 복잡하니..
직관적이고 쉬운 switch문으로 보기좋게 바꾸라는 겁니다.
때문에 if문을 굳이 안쓸이유가 없습니다..섞어써서
완벽한 결과를 얻으세요
if else가 안되는 이유는 보기에 복잡하니..
직관적이고 쉬운 switch문으로 보기좋게 바꾸라는 겁니다.
때문에 if문을 굳이 안쓸이유가 없습니다..섞어써서
완벽한 결과를 얻으세요
- 시로우카무이
- 2012/04/20 PM 05:24
0 ~ 100 사이의 숫자라면 switch문 들어가기 전에 0 ~ 100 사이의 숫자인지 유효성 체크를 먼저 하는게 더 좋은 방법입니다.
- gogumada
- 2012/04/20 PM 05:27
-2를 입력하시면 나누기 연산시 값이 int형의 경우 0이 나올겁니다 그래서 F가 나오게 됩니다.
그러니 시로우카무이 님 말씀대로 미리 체크를 하는게 더 좋은방법이되겠네요
그러니 시로우카무이 님 말씀대로 미리 체크를 하는게 더 좋은방법이되겠네요
- 정직하게살자!
- 2012/04/20 PM 05:34
그냥 간단히 int s; ==> unsigned s; 로 고치세요.
-2가 됐든 뭐가 됐든 10미만의 값을 10으로 나누니까 몫이 '0'이 되잖아요.
그래서 case 문에서 항상 's'로 들어가는 겁니다.
각 case 문마다 printf 찍어서 확인해 보시면 어떤 로직을 타는지 아실 수 있죠.
기본적으로 점수는 마이너스가 있을 수 없기 때문에, 입력에서 무조건 부호없는 정수값을 받도록 정해야겠죠.
만일 부호있는 값을 입력 받을 수는 있는데, 코드에서 음수인지 검사하려고 한다면 결국 if문을 사용해야 합니다.
아니면 case 문에다가 일일이 모든 마이너스 정수값을 다 기입해야 합니다만, 이건 미친짓이죠.
단순히 if 문을 사용하지 않는 코드를 작성하는 것이라면, 첫 문장에 적어놓은 방법을 사용하세요.
-2가 됐든 뭐가 됐든 10미만의 값을 10으로 나누니까 몫이 '0'이 되잖아요.
그래서 case 문에서 항상 's'로 들어가는 겁니다.
각 case 문마다 printf 찍어서 확인해 보시면 어떤 로직을 타는지 아실 수 있죠.
기본적으로 점수는 마이너스가 있을 수 없기 때문에, 입력에서 무조건 부호없는 정수값을 받도록 정해야겠죠.
만일 부호있는 값을 입력 받을 수는 있는데, 코드에서 음수인지 검사하려고 한다면 결국 if문을 사용해야 합니다.
아니면 case 문에다가 일일이 모든 마이너스 정수값을 다 기입해야 합니다만, 이건 미친짓이죠.
단순히 if 문을 사용하지 않는 코드를 작성하는 것이라면, 첫 문장에 적어놓은 방법을 사용하세요.
- 도롱군
- 2012/04/20 PM 05:38
#include <stdio.h>
int main(void)
{
int s;
char g;
printf("1~100 사이의 정수를 입력하세요 : ");
scanf("%d", &s);
if (s < 0 || s > 100 )
{
printf("잘못 입력하셨습니다.\n");
return 0;
}
switch(s / 10)
{
case 10 :
case 9 :
g = 'A' ;
break;
case 8 :
g = 'B' ;
break;
case 7 :
g = 'C' ;
break;
case 6 :
g = 'D' ;
break;
default :
g = 'F' ;
break;
}
printf("%c 학점입니다.\n", g);
return 0;
}
int main(void)
{
int s;
char g;
printf("1~100 사이의 정수를 입력하세요 : ");
scanf("%d", &s);
if (s < 0 || s > 100 )
{
printf("잘못 입력하셨습니다.\n");
return 0;
}
switch(s / 10)
{
case 10 :
case 9 :
g = 'A' ;
break;
case 8 :
g = 'B' ;
break;
case 7 :
g = 'C' ;
break;
case 6 :
g = 'D' ;
break;
default :
g = 'F' ;
break;
}
printf("%c 학점입니다.\n", g);
return 0;
}
- 루리웹-kpg1226
- 2012/04/20 PM 05:54
똑같은 답이 몇개여... 졸라쉽구만...
user error : Error. B.