-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;
}
4

1 回答 1

1

entrySegments是函数内部的局部作用域变量validateCharAmount

您不能将它返回给调用者,因为它的生命在函数结束时结束。

您可以使用malloc & co函数来执行此操作。

此外entrySegments[charAmount],地址数组越界。最后可访问的项目是entrySegments[charAmount-1].

于 2017-01-24T15:38:51.030 回答