当读取函数,指针的输入时,cs50 credit.c停止工作?

时间:2018-04-15 18:51:24

标签: c arrays pointers cs50

我一直在教自己一些C并从cs50课程中解决了问题。我的程序运行正常,但我试图让它更简单,并将其分成尽可能多的函数。除了 readInput 函数之外,一切都有效。我很确定它与数组中的指针如何工作有关,我试图做一些人在这里建议的东西,但我得到一个分段错误,我尝试了不同的方法来做到这一点,但一切都导致更多的错误。任何提示都将受到高度赞赏!

void readInput(int **digits){
    char c; // char to get the digits
    int position = 0; // pos in the array
    while ((c = getchar()) != '\n') { 
        if (c >= '0' && c <= '9') { 
        (*digits)[position] = c - '0'; 
        position++;
        }
    }
}

int main(int argc, char const *argv[])
{
    printf("Please enter your credit card number\n");
    int digits[16];
    intitializeArray(16, digits);
    readInput(&digits);
    int length = getLength(digits);
    int resultSecondDigits = getValueSecondDigits(length, digits);
    int resultFirstDigits = getValueFirstDigits(length, digits);
    checkValidity(resultFirstDigits+resultSecondDigits, digits);
    return 0;
}

1 个答案:

答案 0 :(得分:1)

正确阅读编译器警告

  

pembroke11.c:2:6:注意:预期'int **'但参数的类型为'int   (*)[16]'void readInput(int ** digits){

应该是这样的

void readInput(int (*digits)[16]){ 
/* some code */
}

OR

无需将digits的地址传递给readInput()函数,只需传递数组名称即可。

void readInput(int *digits){
        int c; // char to get the digits
        int position = 0; // pos in the array
        while ((c = getchar()) !='\n') { /* type of c should be int as getchar() returns int */
                if (c >= '0' && c <= '9') {
                        digits[position] = c - '0';
                        printf("%d\n", digits[position]);
                        position++;
                }
        }
}