Member 13550518 Ответов: 3

Я новичок в концепции Терминатора массивов можно ли получить -1 в качестве Терминатора массива


мне нужно добавить Терминатор массива, но я не знаю, как поменять мои циклы на него, если это Терминатор, как мне распечатать его в следующем доступном слоте, чтобы подтвердить правильность?

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {

    int arr[100]; 
    int i;  
    int x;
    printf("how many values would you like to imput :\n");
	scanf("%d", &x); 
	
    for(i=0; i<x; i++)  
    {  
	    printf("values array number %d : ",i);
        scanf("%d", &arr[i]);  
    }  
  
    printf("\n values inside the array arr: ");  
    for(i=0; i<x; i++)  
    {  
        printf("%d  ", arr[i]);  
    } 
    printf("\n");
	
return 0;
}


Что я уже пробовал:

я попытался создать правило с помощью if и else, но просто придумал ошибку

Patrice T

Вы должны спросить, где вы нашли эту "концепцию Терминатора массива".

3 Ответов

Рейтинг:
1

Richard MacCutchan

Не забудьте проверить, что значение x меньше 100 при первом вводе.

for(i=0; i<x; i++)
{
    printf("values array number %d : ",i);
    scanf("%d", &arr[i]);
}
arr[i] = -1; // set end of values marker. NB this only works if no values could be -1

printf("\n values inside the array arr: ");
for(i=0; arr[i] != -1; i++)  // use the marker as the loop terminator
{
    printf("%d  ", arr[i]);
}
printf("\n");


Рейтинг:
1

CPallini

Терминатор массива для Ан int массив, вообще говоря, не очень хорошая идея, потому что вы используете допустимое значение элемента (например, -1) для другой цели (следовательно, в вашем коде вы должны быть последовательны. Более того, если другие используют ваш код, то они должны быть хорошо осведомлены о таком соглашении). В любом случае

#include <stdio.h>

#define SIZE 100

int main(int argc, char *argv[]) {

    int arr[SIZE];
    int i;
    printf("insert values (-1 to finish):\n");

    for (i=0; i<(SIZE-1); ++i)
    {
      printf("values array number %d : ",i);
      scanf("%d", &arr[i]);
      if ( arr[i] == -1) break;
    }

    arr[i] = -1; // the i==(SIZE-1) corner case

    printf("\n values inside the array arr: ");

    for (i=0; arr[i] != -1; ++i)
    {
        printf("%d  ", arr[i]);
    }
    printf("\n");

    return 0;
}
~  


Рейтинг:
0

KarstenK

В вашем коде вы должны проверить, что x меньше 100, как:

for(i=0; (i<x) && (i<100); i++) 

Другой и лучший вариант-это:
int *arr = new int[x];//dynamic allocation
//your code
delete arr;//cleanup