비주얼 스튜디오 콘솔 문제
조회수 537회
int oddCheck(int *param) {
for (int i = 0; i < 10; i++) {
if (param[i] % 2 == 1) {
printf("%d ", param[i]);
}
}
printf("\n");
}
int evenCheck(int *param) {
for (int i = 0; i < 10; i++) {
if (param[i] % 2 == 0) {
printf("%d ", param[i]);
}
}
printf("\n");
}
int main(void)
{
int *numArray[10];
int num;
for (int i = 0; i < 10; i++) {
printf("intput : ");
scanf_s("%d\n", &num);
numArray[i] = num;
}
oddCheck(numArray);
evenCheck(numArray);
}
코드를 이런식으로 짰는데 코드 자체에는 문제가 없는데 디버그 콘솔에서
printf("intput : ");
위와 같은 부분을 두번째 실행에서 제대로 출력을 못하네요. 마지막 부분도 마찬가지로 input이 한번 추가로 나오는 문제도 있구요. 이유는 어째선지 모르지만 마지막은 나오지 않아야 할 부분인데 나와서 그런지 제가 입력한 11이라는 정수도 씹히구요. 덕분에 프로그램은 멀쩡하게 돌아가는데 보기 상당히 불쾌합니다 ㅠㅠ
1 답변
-
에러 뜨지 않던가요? 이대로 컴파일이 되고 동작을 하나요?
int *numArray[10];
는 2차원으로 인식됩니다. 정확히 얘기하자면, entity 10개의 integer에 대한 pointer들의 모음으로 생각됩니다.
int numArray[10] = {0};
으로 하시면 됩니다. = {0}은 없어도 크게 상관 없지만 일단 지역변수니 해주면 좀 더 좋습니다.
한편 oddCheck, evenCheck 함수는 int return으로 되어있는데 return 값을 명시하든지, 아니면 그냥 void 형으로 사용하셔야 합니다.
또한 scanf 함수는 그 특성상 "%d\n"을 받을 때, 숫자만 받으면 저절로 \n을 입력하는 것이 아니고 \n까지 입력해야 한 입력이 끝납니다. 그래서 동작이 중간에 어긋나게 된 거죠. 만약 다음 행으로 넘어가는 것을 구현하고 싶으시다면,
#include <stdio.h> #include <stdlib.h> using namespace std; void oddCheck(int *param) { for (int i = 0; i < 10; i++) { if (param[i] % 2 == 1) { printf("%d ", param[i]); } } printf("\n"); } void evenCheck(int *param) { for (int i = 0; i < 10; i++) { if (param[i] % 2 == 0) { printf("%d ", param[i]); } } printf("\n"); } int main(void) { int numArray[10] = {0}; int num; for (int i = 0; i < 10; i++) { printf("intput : "); scanf_s("%d", &num); numArray[i] = num; } oddCheck(numArray); evenCheck(numArray); return 0; }
와 같이 하면 됩니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력