프로그래밍

선생님들 코딩 질문이 있습니다.

반복문 연습중인데요...

구구단 너무 어려워요

여기에서 저 와일문에 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);
        
    }
}

 

 

19개의 댓글

무한루프에서 빠져나오려면 어떻게 해야될까?

 

1. while문 안에 있는 조건하고 안 맞는다

2. break;을 써서 빠져나온다.

 

 

0
2020.10.23
@일째프로그래밍

그 조건이.....

0
2020.10.23
@Sonyas

너무 애매합니다 문자가 들어가면 바로 무한루프 돌아버려서... 나머지 정수는 다 됩니다

0
2020.10.23

왜 굳이 xor을 씀?

0

^은 왜쓴거야? 그냥 || 쓰는게 나을텐데

0
2020.10.23
@피곤큐곤아르곤

무한루프를 어떻게 해결해볼라고 별거 다 써보는 중이였습니다...

0
2020.10.23

잠깐 봤는데

 

while (n < 1 || n > 9)

{

    printf("error 1~9 사이의 정수를 입력하시오:\n");

    scanf_s("%d", &n);

}

printf("출력 될 구구단 : %d단\n", n);

gugu(n);

return 0;

 

의미없는 조건이랑 중복 코드 디게 많은데 이렇게 해도 됨... 의도는 ||이라고 보여지는데 저러면 반복문 내에서 출력할 일은 없지

0
2020.10.23
@시바댕댕이

왜 or로 해?

0
2020.10.23
@시바댕댕이

저도 첨에 do while로 했는데 알파벳을 입력하면 무한루프가 발생해서요 ㅜㅜㅜ

0
2020.10.23

http://letmegooglethat.com/?q=Guguclass

0

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 그대로

...

 

루프를 도느거지

0
@피곤큐곤아르곤

https://stackoverflow.com/questions/28613805/how-to-prevent-non-numeric-input-in-c

 

여기에 문자 입력되면 예외처리하는 법이 나와있는데 해석은 알아서

 

0
2020.10.23
@피곤큐곤아르곤

아아!!! 감사합니다 한번 해볼게요!

0
2020.10.23
@피곤큐곤아르곤

아 그런 이유가 있었군요... 그럼 문자를 받았을 때 이 현상을 해결 할 방법은 없을까요?

0
2020.10.23

일단 do while 쓰지마..... for문을 쓰거나 그냥 while문 써..... 질문 내용은 출근하고 자세히 볼게

0
2020.10.23

#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;

}

}

}

0
2020.10.23

나 같은 경우는 문자(char)을 하나 입력 받고

char이 ‘0’ 보다 크거나 같고 ‘9’ 보다 작거나 같을때까지 입력 받게 해.

 

그렇게하면 문자 넣어도 처리 됨

0
2020.10.24

아스키 코드 참조해봐

C는 문자를 문자 그대로 안봄

0
2020.10.25

왕....선생님들.... 다들 너무 감사드려요... ㅜㅜㅜ 너무어렵네요 코딩

0
무분별한 사용은 차단될 수 있습니다.
번호 제목 글쓴이 추천 수 날짜 조회 수
5693 [프로그래밍] 요즘 모바일 개발은 어떤 걸 사용하나요? 12 커피좋아용 0 1 일 전 272
5692 [프로그래밍] 취준생 안드로이드 팀플 주제 머할까요... 8 조강현 0 2 일 전 200
5691 [프로그래밍] 공통코드테이블은 대체 왜 만드냐 9 잠적자 0 3 일 전 401
5690 [프로그래밍] 토이프로젝트 주제 선정 3 개드립눈팅1세대 0 3 일 전 214
5689 [프로그래밍] 엥 구글 플러터 유기각 재는거임?? 4 최수연 0 5 일 전 335
5688 [프로그래밍] 반도체 장비 업계인 있음? 9 캡틴띠모 0 6 일 전 288
5687 [프로그래밍] 안드로이드 책 추천좀 6 집에가게해줘 0 7 일 전 153
5686 [프로그래밍] 폰 스크리닝 해 본 사람 있어? 3 무지개빛푸딩 0 7 일 전 389
5685 [프로그래밍] jsp 트리메뉴 만들고있는데 구상한게가능한지 의견좀물어볼께 11 평택국 0 8 일 전 167
5684 [프로그래밍] JPA 도와줘어억 ㅠ 10 모그리또 0 8 일 전 251
5683 [프로그래밍] 의사는 뽑는 인원 제한하는데 부캠은 왜 제한 안 할까 5 조강현 0 10 일 전 373
5682 [프로그래밍] 그 혹시 게임쪽 종사자 있음? 17 god79ii 0 14 일 전 634
5681 [프로그래밍] 코린이 ㅅㅂ 뭐가 문젠지 모르겠어요 9 집에가게해줘 0 14 일 전 450
5680 [프로그래밍] Dear Imgui 라고 아시나요? 2 년째모쏠 0 14 일 전 246
5679 [프로그래밍] 현업개발자분들 주말엔 편하게 쉴수있나요? 10 키로 0 15 일 전 873
5678 [프로그래밍] 무엇이든 물어보세요. 28 변현제 0 17 일 전 417
5677 [프로그래밍] 개발자보단 엔지니어가 취업이 잘됨 5 iillillill 2 18 일 전 750
5676 [프로그래밍] 프론트엔드 개발자 연봉 1억 넘는 사람 있어? 13 잠적자 0 18 일 전 649
5675 [프로그래밍] Exiftool 이거 일본어 못 읽는데 13 부터시작하는이세... 0 20 일 전 237
5674 [프로그래밍] 반응형 웹페이지가 내가상상한거랑 좀 다르네 4 평택국 0 21 일 전 456