C101:가장 좋은 방법을 채우는 배열에서 사용자 입력?
문제
나는 데 힘든 시간을 이해하고 따라서 관리하기 어레이와 인덱스로 이동 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
}