c언어 백준 10871 런타임에러

c언어 백준 10871 런타임에러

작성일 2022.10.10댓글 2건
    게시물 수정 , 삭제는 로그인 필요



개발환경은 visual stdio 2022이고요

이해가 안가는 점이 있어서 질문드립니다.

제가 봤을때는 코드에 아무문제가 없는데 자꾸 아래와 같은 버그가 생깁니다.
보니까 a에서 이상한 값을 읽는 중이라고하는데 이해가 안갑니다

일단 이 아래 있는게 제가 오류가 생긴 코드입니다.
int main()
{
int n, x, i;
int a[]={0,};
scanf_s("%d %d", &n, &x);

for (i = 0; i < n; i++)
{
scanf_s("%d", &a[i]);
}

for (i = 0; i < n; i++)
{
if (a[i] < x)
printf("%d ", a[i]);
}
return 0;
}
한가지 더 궁금한게 있는데 
백준 10871문제입니다.

문제

정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 이때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000)

둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000보다 작거나 같은 정수이다.

출력

X보다 작은 수를 입력받은 순서대로 공백으로 구분해 출력한다. X보다 작은 수는 적어도 하나 존재한다.



위와 같은 결과값이 나오려면 먼저 입력한 값을 배열에 저장하고 그 뒤에 비교한 후 출력하는게 맞는거 아닌가요?

아래가 정답코드인데 아래와 같이 작성하면 수열에 값을 입력하는 도중에 조건을 판별해서
조건이 맞으면 출력하게 되지않나요?
그러면 위와같은 그림이 안나올거 같은데 이게 정답인게 이해가 안갑니다.

그리고 scanf시 스페이스바로 입력값 구분하는 것과 엔터로 구분하는것에 차이가 있나요?


정답코드
#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS

int main()
{
int n, x, i, a;
scanf("%d %d", &n, &x);

for (i = 0; i < n; i++) 
{
scanf("%d", &a);
if (a < x)
printf("%d ", a);
}
return 0;
}






#c언어 백준 #c언어 백준 문제 #c언어 백준 1008 #c언어 백준 5597 #백준 10818 c언어 #백준 10926 c언어 #백준 10951 c언어 #백준 10950 c언어 #백준 2562 c언어 #백준 2439 c언어

profile_image 익명 작성일 -

첫 째.

int a[] = { 0, };

배열의 크기가 없습니다. 배열을 선언할 때는 반드시 크기를 입력해 주어야 합니다.

실제 사용될 메모리의 최대값을 반영해서 배열을 선언하세요.

예를 들면 아래와 같이요.

int a[10000] = { 0, };

둘 째.

scanf() 에서 공백문자와 엔터로 구분할 때의 차이점은 엄밀히 말하면 있지만 정수형 입력의 경우에는

앞에 있는 white space(공백, 엔터, 탭문자 등)는 전부 건너 뛰고 읽기 때문에 차이가 없습니다.

셋 째.

지금의 경우에는 입력되는 값들 중 특정값(여기서는 x)보다 작으면 출력하면 되기 때문에

굳이 배열에 저장할 필요가 없습니다.

아래와 같이 작성하면 수열에 값을 입력하는 도중에 조건을 판별해서 조건이 맞으면 출력하게 되지않나요? 그러면 위와같은 그림이 안나올거 같은데 이게 정답인게 이해가 안갑니다.

그렇게 하면 됩니다. 왜 위와 같은 그림이 안나올거 같다고 생각하는지 잘 이해가 안되네요.

순서대로 읽기 때문에

1 10 4 9 2 3 8 5 7 6 ^ ^ ^ ^

순서대로 5보다 작으면 출력하고 아니면 출력하지 않으면 자연스럽게 1 4 2 3 이 출력되지 않나요?

넷 째.

참고로 온라인 테스트할 때는 scanf_s() 함수는 사용하지 마세요. 이 함수는 Visual C/C++ 에서만

동작하는데 온라인 테스트 사이트에서는 Visual C/C++ 를 사용하지 않기 때문에 에러가 날 것입니다.

첫 줄에

#define _CRT_SECURE_NO_WARNINGS

를 쓰고, 그냥 scanf() 함수를 사용하세요.

profile_image 익명 작성일 -

int a[]={0,};

이건 메모리가 잡히는 게 아니예요

int a[10000+1]={0,};

이렇게 충분히 잡아보세요.

c언어 백준 10871 런타임에러

... 있는데 백준 10871문제입니다. 문제 정수 N개로 이루어진 수열 A와 정수 X가... 때문에 에러가 날 것입니다. 첫 줄에 #define _CRT_SECURE_NO_WARNINGS 를 쓰고, 그냥 scanf...

백준 c언어런타임 에러

백준 c언어 10871번 문제고 배열을 사용해서 풀고 싶어서 배열을 사용하니 런타임 에러가 뜸니다 왜그런지 이유좀 알려주세요. #include<stdio.h...

백준 c언어 4796번 런타임 에러

... i++) { printf("Case %d: %d\n", i, res[i]); } } [/code] 런타임 에러가 발생하는데..ㅠㅠ 길 잃은 어린 양을 도와주시와요 <소스 코드...

c언어 런타임에러 뜻 이유

... 알고리즘인데 런타임에러백준에서 자꾸 오류가 나는데 왜그러는걸까요 #include <stdio.h> int main() { int num, arr[100], small, big = 0; scanf("%d...

백준 런타임에러 #2588번

c언어로 작성해서 비쥬얼에서는 작동이 잘 되는데 백준에서는 런타임 에러라고 뜨네요. 어떤 부분이 잘못된건가요??ㅠㅠ #include<stdio....

c99 백준 10871

런타임 에러가 뜨는지 모르겠어용 도와주세용 미리 감사합니당 [code]#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main(void) { int N, X; int A...