我一直在教自己一些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;
}
答案 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++;
}
}
}