문제

나는 데 힘든 시간을 이해하고 따라서 관리하기 어레이와 인덱스로 이동 C.이들은 내 두 개의 고전적인 접근 하지만 그들은 작동하지 않는 것으로 그들이 계속 반복할 때 상태에 도달했:

#include<stdio.h>
#define MAX 255

int main(){

    int arr[MAX]={0};
    int idx=0;

    /* Approach #1 */

    printf("Enter elements, -1 to finish:\n");
    scanf("%d", &arr[idx]);

    while(arr[idx-1] != -1 && idx < MAX){
        printf("Enter elements, -1 to finish:\n");
        scanf("%d", &arr[idx]);
        idx++;        
    }

    /* Approach #2 */

    do{
        printf("Enter elements, -1 to finish:\n");
        scanf("%d", &arr[idx]);
        idx++;
    }while(arr[idx-1] != -1 && idx < MAX);

    // Main func continues here.

}

어떤 조언을 것입니다.

업데이트:

지금 그것을 작동합니다!덕분에 많 모든 너희들은 즉시 응답합니다.이것은 확실히 좋은 지역 사회,그것은 나에게 많은 도움이.

도움이 되었습니까?

해결책

arr[idx] <= MAX

idx < MAX

지 않는 한 당신은 항목을 확인하는 대신 index.

당신은 또한 항상 확인"다음"요소에 대한 -1(arr[idx]!= -1)고 있기 때문에 증가하 idx 하기 전에 확인 가치를 추가했습니다.

그래서 만약 당신

arr[idx-1] != -1

당신은 허용될 수 있습니다.

다른 팁

arr[idx] <= MAX

idx <= MAX
while(arr[idx] != -1 && idx <= MAX){ // Fixed by sklivvz
    printf("Enter elements, -1 to finish:\n");
    scanf("%d", &arr[idx]);
    idx++;        
}

첫째,당신은 확인해야 하는 경우 인덱스 variabel idx 보다 작은 최대(지보다 작거나 같음).당신의 경계하는 경우 인덱스 equals MAX.배 MAX=10 지수 값을 0 포함하여 9,하지만 10.

둘째,당신이 첫 번째 요소를 추가 arr[0],당신이 증가 당신의 색인 0 에서 1,당신은 다시 이동하는 동안-상태를 확인하는 경우 arr[1]==-1,it 하지 않습니다.그래서 대신 확인하는 arr[idx-1]!= -1 입니다.그러나는 첫 번째 시간을 얻을하는 동안-루프가 있는 것이 실제로 확인 arr[-1]!= -1 도 벗어났습니다.;)그래서 당신은 필요한 그 밖으로 해결하는 방법이 하나입니다.

로마 M:

첫째,모든 사람에게 묻는 질문가 시작한 프로그래밍 물론이고,아마 아직에 대해 배운 포인터입니다.둘째,당신은 지금은 모두 처리 카운터의 포인터.나의 혜택을 볼 때는 사용과 비교하여 인덱스는 다음과 같다:

for(idx=0;idx < 최대;++idx){

scanf("%d", &arr[idx]);
if(arr[idx] == -1)
    break;

}

루프를 사용하여 제거할 수 있습에 대한 필요성이 지저분 idx-1 검사 코드:

/* Approach #3*/
int i;
int value;

for (i = 0; i < MAX; ++i)
{
  printf("Enter elements, -1 to finish:\n");
  scanf("%d", &value);
  if (value == -1) break;
  arr[i] = value;
}

C 어레이 시작에서 계산 0.

할당하는 경우에는 배열의 크기 최대,액세스하는 요소에서 최대가 될 것입 오류가 있습니다.루프를 변경하여;

int arr[MAX];
for ( .... && idx < MAX )

에서 첫 번째는 루프

arr[idx] <= MAX

줄을 다음과 같이 수정하십시오

idx <= MAX

에서 당신의 두 번째는 루프에,당신은 증가 idx 하기 전에 테스트-그것으로 끝나야

} while ((arr[idx-1] != -1) && (idx-1 <= MAX));

또한하는 경향이 있 parenthesize 모든 내부 조건하에 있어 절대적으로 우선 순위는 올바른(따라서는 추가 브래킷 위).

나와 가족은 이렇습니다.

당신을 걱정할 필요가 없에 대한 배열의 범위를 및 다른 조건이 있다.

int cnt = MAX;        // how many elements in the array, in this case MAX
int * p = &arr[0];    // p is a pointer to an integer and is initialize to the address of the first
                      // element of the array. So now *p is the same as arr[0] and p is same as &arr[0]

// iterate over all elements. stop when cnt == 0
while (cnt) {

    // do somthing
    scanf("%d", *p); // remember  that *p is same as arr[some index]
    if (*p == -1)    // inspect element to see what user entered
        break;

    cnt --;  // loop counter
    p++;     // incrementing p to point to next element in the array
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top