코드에서 배열의 크기가 동적으로 조정될 것으로 예상됩니다. 그러나 그것은 C에서 일어나는 것이 아닙니다. 올바른 크기의 배열을 미리 만들어야합니다. 당신이 수집하는 당신이 원하는 수있는 모든 점수에 대한 당신의 배열에 충분한 메모리를 할당한다고 가정하면, 다음 작동합니다 :
#include <stdio.h>
int addScores(int *a, int *count) {
return scanf("%d", &a[(*count)++]);
}
int main(void) {
int scores[100];
int sCount = 0;
int sumScore = 0;
printf("enter scores followed by <return>. To finish, type Q\n");
while(addScores(scores, &sCount)>0 && sCount < 100);
printf("total number of scores entered: %d\n", --sCount);
while(sCount >= 0) sumScore += scores[sCount--];
printf("The total score is %d\n", sumScore);
}
몇 가지를주의하는 것이 :
- 기능
addScores
를 유지하지 않습니다 총 카운트 값 : 변수는 메인 프로그램에서 유지되는
- 단순한기구 끝 입력 : 편지 입력하면
scanf
숫자를 찾아 0
- 간단한 지시 값을 반환하지사용자에게 무엇을해야하는지 알려주는 것은 모든 프로그램의 필수 부분입니다. 심지어 단순한 5 라이너까지도 포함됩니다.
- 위의 특정 표현을 작성하는 데 더 간결한 방법이 있지만 내 경험상 명확성은 항상 영리함보다 우선하며 컴파일러는 일반적으로 명백한 중복성을 최적화합니다. 따라서 - 당신이 의도 한 것을 얻을 수 있도록 여분의 괄호를 두려워하지 마십시오.
- 의 경우은 배열 크기를 동적으로 늘려야합니다.
realloc
을 확인하십시오. 가변 크기의 배열을 만들려면 malloc
과 함께 사용할 수 있습니다. 그러나 위 코드 스 니펫 에서처럼 초기 배열이 선언 된 경우에는 작동하지 않습니다.
!=0
대신 반환 값 (addScores
및 따라서 scanf
) >0
을 테스트하는 것은 누군가가 ctrl-D ("EOF")를 입력하여 입력을 종료하는 경우를 포착합니다. 제안에 대한 @chux 감사합니다!
'{i}'는 표현이 없기 때문에 표현식이 아닙니다 ... 또한'counter'와'c'를 섞습니다. 동적 배열에 대해 생각해보십시오. C는 기본적으로 그런 것이 없습니다. 어쩌면 C++을 살펴 봐야할까요? – kay
이고 c는 정의되지 않습니다. –
이 코드로 무엇을하려합니까? 'a [* c] = {i}'라는 표현은 내가 아는 한 유효한 C 구문이 아닙니다. (C 언어 이전에 어떤 언어를 배웠습니까?) – John