2013-10-30 2 views
0

scanf를 사용하여 배열에 숫자를 추가하고 싶습니다. 무엇이 잘못 되었습니까?스캔 f를 사용하여 배열에 숫자를 추가하는 방법

void addScores(int *a, int count){ 
    int i; 
    for(i = 0; i < count; i++) { 
     printf("please enter your score.."); 
     scanf("%d", a+i); 
    } 
} 

사용법 :

int main() { 
    int scores[6]; 
    addScores(scores, 6); 
} 
+0

'{i}'는 표현이 없기 때문에 표현식이 아닙니다 ... 또한'counter'와'c'를 섞습니다. 동적 배열에 대해 생각해보십시오. C는 기본적으로 그런 것이 없습니다. 어쩌면 C++을 살펴 봐야할까요? – kay

+0

이고 c는 정의되지 않습니다. –

+0

이 코드로 무엇을하려합니까? 'a [* c] = {i}'라는 표현은 내가 아는 한 유효한 C 구문이 아닙니다. (C 언어 이전에 어떤 언어를 배웠습니까?) – John

답변

1

코드에서 배열의 크기가 동적으로 조정될 것으로 예상됩니다. 그러나 그것은 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); 
} 

몇 가지를주의하는 것이 :

  1. 기능 addScores를 유지하지 않습니다 총 카운트 값 : 변수는 메인 프로그램에서 유지되는
  2. 단순한기구 끝 입력 : 편지 입력하면 scanf 숫자를 찾아 0
  3. 간단한 지시 값을 반환하지사용자에게 무엇을해야하는지 알려주는 것은 모든 프로그램의 필수 부분입니다. 심지어 단순한 5 라이너까지도 포함됩니다.
  4. 위의 특정 표현을 작성하는 데 더 간결한 방법이 있지만 내 경험상 명확성은 항상 영리함보다 우선하며 컴파일러는 일반적으로 명백한 중복성을 최적화합니다. 따라서 - 당신이 의도 한 것을 얻을 수 있도록 여분의 괄호를 두려워하지 마십시오.
  5. 의 경우은 배열 크기를 동적으로 늘려야합니다. realloc을 확인하십시오. 가변 크기의 배열을 만들려면 malloc과 함께 사용할 수 있습니다. 그러나 위 코드 스 니펫 에서처럼 초기 배열이 선언 된 경우에는 작동하지 않습니다.
  6. !=0 대신 반환 값 (addScores 및 따라서 scanf) >0을 테스트하는 것은 누군가가 ctrl-D ("EOF")를 입력하여 입력을 종료하는 경우를 포착합니다. 제안에 대한 @chux 감사합니다!
+1

EOF에 대처하기 위해 'while (addScores (scores, & sCount)> 0 ...'? – chux

+1

@chux - 유효한 포인트를 만듭니다. 누군가가 ctrl-D를 다른 문자 대신에 입력 한 경우를 생각하지 않았습니다. 이 시나리오는 실제로 코드 예제를 손상시킬 것입니다. 당신의 제안이 그것을 고칠 수 있습니다. 지금 내 대답 업데이트 중 ... – Floris

2

예상 말한다 제안하다

scanf("%d", &a[i]); 
+0

OP가 "% i"를 사용했을 때 추천 답변에서 "% d"을 사용하는 이유가 궁금하십니까? 그들이 받아들이는 입력이 약간 다르긴하지만 어느 쪽이든 괜찮습니다. – chux

2
a+i is not friendly to newcomer. 

나는 그것을 내가 제언 scanf와 내부 내가 앞에 첫 브래킷 {에 표현 ...

void addScores(int a[],int *counter){ 
    int i=0; 
    printf("please enter your score.."); 
    scanf_s("%i", a[*c] = {i}); 
}//end add scores 
+0

'a + i' 대'& a [i]'? 나는 당신의 요점을 이해하지만, 나는'a + i'을 유지할 것입니다. –

+0

예,하지만 저는 신입 사원이 이해하기 쉽다고 생각합니다. 오래된 물고기에게는 습관 문제 일뿐입니다. – longdeqidao

관련 문제