2017-01-24 3 views
-1

Я смог сделать это с помощью массива из 2 индексов, но когда у меня есть массив из 3, он меняет индекс только одного значения, а когда у меня есть 9 индексов моя проверка предупреждает.Как изменить индекс значений массива с нулевыми индексами

Я пытаюсь что-то вроде этого, когда ввод 11 в массиве 3, чтобы получить 011, но я получаю 101.

Я смотрел на мою вторую функцию, где я обхвата через индексы для переключения значений.

int validateInt(int digitAmount); 
char* validateCharAmount(int charAmount); 

int main(void) { 
    do{ 

     printf("Please enter Student's ID': "); 
     studentID=validateInt(3); 
    }while(studentID!=0); 

    return 0; 
} 

int validateInt(int digitAmount) 
{ 
    int value; 
    char *entrySegments;  
    int index=0; 
    char temp; 
    entrySegments=validateCharAmount(digitAmount); 
    while(index<digitAmount){ 
     while((entrySegments[index]-48)<0 || (entrySegments[index]-48)>9){ 
      printf("Invalid Value! Please input an integer: "); 
      entrySegments=validateCharAmount(digitAmount); 
      index=0; 
     } 
     value=10*value+(entrySegments[index]-48); 
     index++; 
    } 
    printf("%d",value); 
    return value; 
} 

char* validateCharAmount(int charAmount){ 

    char entrySegments[charAmount]; 
    int index=0; 
    entrySegments[0]= NULL; 
    entrySegments[charAmount]= NULL; 
    scanf("%s",entrySegments); 
    while(entrySegments[charAmount]!=NULL){ 
     printf("You entered too many characters! Please input %d: ", charAmount); 
     scanf("%s",entrySegments);  
    } 
    while(index<charAmount){ 
     while((entrySegments[index])==NULL){   
      entrySegments[index]=entrySegments[index-1]; 
      entrySegments[index-1]=48; 
     } 
     index++; 
    } 
    return entrySegments; 
} 
+2

Вы возвращаете указатель на локальную переменную в 'validateCharAmount'. Как только функция вернется, все локальные переменные перестают существовать. Указатель более недействителен. –

+0

если у меня есть массив из 2, он возвращает значение просто отлично ... –

+0

Нет, это не нормально, это просто * кажется * нравится. Неопределенное поведение (это то, что у вас есть) включает в себя возможность кажущейся работы в порядке. –

ответ

1

entrySegments является локальной областью действия переменной внутри функции validateCharAmount.

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

Вы можете использовать функцию malloc & co для этого.

Кроме того, entrySegments[charAmount] адресует массив за пределы. Последний доступный предмет: entrySegments[charAmount-1].

+0

, если у меня есть массив из 2, он возвращает значение просто отлично ... –

+0

Это неопределенное поведение, это означает: вам повезло, если он работает с 2 элементами. – LPs

+0

- это проблема, которая не вызывает переключения значений в массиве или просто общий анализ. –