반복문 연습중인데요...
구구단 너무 어려워요
여기에서 저 와일문에 0이하 10이상은 전부 다시 돌아가게끔 할라하는데 연산자를 어케해야할지 모르겠어요
아래는 코드 전체인데 뭐가 문제인지 모르겠어요 xor연산을 해서 나머진 잘 되는데 문자를 입력했을 때 무한루프에 들어가더라구요....
이유가 왜인지 알 수 있을까요...
do while도 써보고 와일 저렇게 또 씌워보고 그냥 별짓거리 다하고있는데 조건이 문제네요 ㅜㅜ
int main() {
int n;
int menu;
printf("정수를 입력하시오:\n");
scanf_s("%d", &n);
while (n < 1 ^ n > 9){
if (n < 1) {
printf("error 1~9 사이의 정수를 입력하시오:\n");
scanf_s("%d", &n);
}
else if (n > 9) {
printf("error 1~9 사이의 정수를 입력하시오:\n");
scanf_s("%d", &n);
}
else {
printf("출력 될 구구단 : %d단\n", n);
gugu(n);
}
}
printf("출력 될 구구단 : %d단\n", n);
gugu(n);
return 0;
}
void gugu(int a) {
for (int i = 1; i < 10; i++) {
int result = 0;
result = a * i;
printf("%d x %d = %d\n", a, i, result);
}
}
-----------------------------------
첨에 했던 코드는 이거였습니다
#include <stdio.h>
void gugu(int a);
int main() {
int n;
int menu;
do {
printf("1~9 사이의 정수를 입력하시오:\n");
scanf_s("%d", &n);
} while (n < 1 ^ n > 9);
printf("출력 될 구구단 : %d단\n", n);
gugu(n);
return 0;
}
void gugu(int a) {
for (int i = 1; i < 10; i++) {
int result = 0;
result = a * i;
printf("%d x %d = %d\n", a, i, result);
}
}
일째프로그래밍
무한루프에서 빠져나오려면 어떻게 해야될까?
1. while문 안에 있는 조건하고 안 맞는다
2. break;을 써서 빠져나온다.
Sonyas
그 조건이.....
Sonyas
너무 애매합니다 문자가 들어가면 바로 무한루프 돌아버려서... 나머지 정수는 다 됩니다
아는척잘함
왜 굳이 xor을 씀?
피곤큐곤아르곤
^은 왜쓴거야? 그냥 || 쓰는게 나을텐데
Sonyas
무한루프를 어떻게 해결해볼라고 별거 다 써보는 중이였습니다...
시바댕댕이
잠깐 봤는데
while (n < 1 || n > 9)
{
printf("error 1~9 사이의 정수를 입력하시오:\n");
scanf_s("%d", &n);
}
printf("출력 될 구구단 : %d단\n", n);
gugu(n);
return 0;
의미없는 조건이랑 중복 코드 디게 많은데 이렇게 해도 됨... 의도는 ||이라고 보여지는데 저러면 반복문 내에서 출력할 일은 없지
아는척잘함
왜 or로 해?
Sonyas
저도 첨에 do while로 했는데 알파벳을 입력하면 무한루프가 발생해서요 ㅜㅜㅜ
a1s2d3f4g5
http://letmegooglethat.com/?q=Guguclass
피곤큐곤아르곤
https://stackoverflow.com/questions/20655381/what-happens-if-c-tries-to-scan-character-in-integer-variable
요기 해답이 나와있는데 대충 번역해보면
"%d에다가 문자를 넣으려고 하면 문자가 정수 포맷이 아니므로, 입력은 되지 않고 입력된 문자는 그대로 입력 대기열에 머물게 된다."
라고 하네. 실제로
int main() {
int n;
char c;
int menu;
scanf("%d", &n);
printf("%f\n",n);
scanf("%c", &c);
printf("%c\n",c);
return 0;
}
라는 실험 코드를 돌려보면 첫번째 scanf에다 아무 문자나 집어넣었을 때, 첫번째 scanf에서는 문자가 입력이 안된 다음 두번째 scanf가 씹히고 바로 해당 문자가 입력되는걸 확인할 수 있음.
즉, 니가 저 코드에다가 문자열을 집어넣었을 때 벌어지는 일은
1) printf 출력
2) scanf 실행 -> 실패, n 그대로
3) while문 실행, n이 그대로이므로 다시 루프
4) printf 출력
5) scanf 실행 -> 실패, n 그대로
...
루프를 도느거지
피곤큐곤아르곤
https://stackoverflow.com/questions/28613805/how-to-prevent-non-numeric-input-in-c
여기에 문자 입력되면 예외처리하는 법이 나와있는데 해석은 알아서
Sonyas
아아!!! 감사합니다 한번 해볼게요!
Sonyas
아 그런 이유가 있었군요... 그럼 문자를 받았을 때 이 현상을 해결 할 방법은 없을까요?
숨은음은
일단 do while 쓰지마..... for문을 쓰거나 그냥 while문 써..... 질문 내용은 출근하고 자세히 볼게
숨은음은
#include
void Gugu(char c);
bool ExitCheck();
int main()
{
char n = '0';
while(true)
{
printf("input 1~9 number : ");
scanf("%c", &n);
getchar();
if(n - '0' < 0 || n - '9' > 0)
{
continue;
}
Gugu(n);
if(ExitCheck())
{
break;
}
}
system("pause");
return 0;
}
void Gugu(char c)
{
int n = c - '0';
printf("\n");
for(int i = 1; i < 10; i++)
{
printf("%d * %d = %d\n", n, i, n * i);
}
}
bool ExitCheck()
{
char menu = '0';
while(true)
{
printf("Exit?(Y/N) : ");
scanf("%c", &menu);
getchar();
printf("\n");
if(menu == 'Y' || menu == 'y')
{
return true;
}
else if(menu == 'N' || menu == 'n')
{
return false;
}
}
}
년째코딩중
나 같은 경우는 문자(char)을 하나 입력 받고
char이 ‘0’ 보다 크거나 같고 ‘9’ 보다 작거나 같을때까지 입력 받게 해.
그렇게하면 문자 넣어도 처리 됨
잎샘바람
아스키 코드 참조해봐
C는 문자를 문자 그대로 안봄
Sonyas
왕....선생님들.... 다들 너무 감사드려요... ㅜㅜㅜ 너무어렵네요 코딩