나는 재 지정된 파일에서 입력을 받고 현재 크기로 보유 할 수있는 것보다 더 많은 값을 넣으려고하면 성장할 것으로 예상되는 -999를 읽을 때까지 해당 파일의 정수를 동적 배열에 저장하는 프로그램을 작업 중입니다. .
나는 그 값을 찾은 위치와 찾는 데 걸린 비교 량을 반환하는 이진 검색을 수행하는 함수에 고정하고 있습니다.
그러나 실행하면 모든 빈 공간에서 0을 포함하여 배열의 모든 값을 얻습니다. 따라서 내 위치 변수와 비교 변수는 버려집니다. 하드 코딩 된 배열에서 완벽하게 작동하기 때문에 기능이 아닙니다.
제 질문은 배열의 해당 부분을 제거하는 방법이 있습니까? 감사합니다
int var;
int counter = 0;
int *orgarr;
int size = 10;
orgarr = (int *) malloc (size * sizeof(int) );
int *tempo;
tempo = (int *) malloc (size * 2 * sizeof(int));
int i;
for ( i = 0 ; i < size ; i++)
tempo[i] = orgarr[i];
free (orgarr);
orgarr = tempo;
size = size * 2;
while (var != -999) {
scanf("%i", &var);
if (var != -999){
orgarr[counter] = var;
}
counter++;
}
for (i = 0; i < size; i++) {
printf("%i", orgarr[i]);
}
realloc을 사용하여 배열의 크기를 변경할 수 있습니다.
포인터가 NULL로 설정되면 realloc은 첫 번째 메모리 할당에서 malloc과 동일하게 작동합니다.
"% d"사용을 고려하십시오. 08과 같이 앞에 0이있는 값이 있으면 "% i"는이 값을 8 진수 값으로 읽으려고합니다. 08의 경우 실패하고 011은 9로 읽습니다. 그러나 실제로 8 진수 값이있는 경우 "% i"를 계속 사용하고 싶을 것입니다.
이것은 각 입력에 재 할당됩니다. counter
변수를 사용하여 한 번에 10을 재 할당하거나 필요에 따라 할당을 두 배로 늘릴 수 있습니다.
10,000을 할당하여 시작한 다음 모든 입력을 읽은 후 올바른 크기로 재 할당 할 수도 있습니다.
int var = 0;
int size = 0;
int *tempo = NULL;
int *orgarr = NULL;
while ( ( scanf ( "%d", &var)) == 1) {//invalid input or EOF will end loop
if ( var != -999) {
size++;
tempo = realloc ( orgarr, size * sizeof ( int));
if ( tempo) {
orgarr = tempo;
orgarr[size - 1] = var;
}
else {
//realloc failed
// return or break but somehow handle the problem
}
}
else {
break;//read -999
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다