c언어 : 100단위가 넘을 때마다 계속할지말지
조회수 382회
for (i = 1; i <= 1000; i++) {
if (i % 7 == 0)
printf("%d ", i);
if (i == 100 || i==200 || i==300 || i==400 || i==500||i==600||i==700||i==800||i==900||i==1000) {
printf("Continue(y/n)? ");
scanf("%c", &a);
if (a == 'y')
continue;
else
break;
}
1부터 1000까지 7의 배수를 출력하는데 100단위가 넘을때마다 계속할지말지 묻는건데 뭐가 틀린건가요?
2 답변
-
scanf("%c", &a);
위에 줄을 아래와 같이 바꾸세요. 아래 코드의 %c앞을 잘 보시면 스페이스바로 공백을 한칸 띄워줬습니다.
scanf(" %c", &a);
-
(•́ ✖ •̀)
알 수 없는 사용자
- %c 앞에 왜 공백을 한칸 띄어야 하는지는 이전에 했던 답변 글에 있습니다. 한번 읽어보시면 이해 될거에요. https://hashcode.co.kr/questions/12755/ 알 수 없는 사용자 2022.10.26 20:38
-
-
char a; for (int i = 1; i <= 1000; i++) { if (i % 7 == 0) printf("%d ", i); if (i == 100 || i == 200 || i == 300 || i == 400 || i == 500 || i == 600 || i == 700 || i == 800 || i == 900 || i == 1000) { printf("Continue(y/n)? "); scanf_s(" %c", &a); if (a != 'y') break; } }
이렇하시면 잘 작동됩니다. 윗 코딩에서 틀리신 점.
- char a = 문자 a 변수 지정 안하셨습니다
- for (int i..) = i의 정수 변수 지정 안하셨습니다.
- 마지막에 } 하나 빼먹으셨습니다.
- scanf -> scanf_s 로 하셔야합니다. 보안상 업그래이드로 모두 이걸로 수정되었습니다.
- %c = 앞에 한칸 띄우기. 이건 앞에 분이 설명하셨네요.
여기서 제가 추가한 점. if (a != 'y') break;
소문자 y가 안나오면 탈출. ||쓰셔서 'Y' 대문자도 추가 지정할 수도 있습니다.
그리고 좀 더 제가 추가하자면.. 중간에 for구문을 넣어서, 간략하게 줄일 수도 있습니다. 일일이 if (i==100 ||...)보단, for로 순차합계 구간을 1~9로 정해서 거기에 100을 곱하시도록 설정하시면 간단하게 아래와 같이 작성하실 수 있습니다. 결과는 같습니다. 이전에 하신 코드는 주석처리했습니다.
char a; for (int i = 1; i <= 1000; i++) { if (i % 7 == 0) printf("%d ", i); for (int a = 1; a <= 9; a++) { if (i == a * 100) { //if (i == 100 || i == 200 || i == 300 || i == 400 || i == 500 || i == 600 || i == 700 || i == 800 || i == 900 || i == 1000) { printf("Continue(y/n)? "); scanf_s(" %c", &a); if (a != 'y') break; } } }
댓글 입력