2017-01-24 47 views
-1

我能夠做到這一點與2索引的數組,但是當我有一個3的數組它只改變一個值的索引,當我有9個索引我的驗證變得警覺。如何更改索引的索引是空的

我想是這樣的,當在3陣列輸入11接收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

是不是在數組中進行值切換或只是進行全面分析的問題 –