每次我尝试这个:
long crypt(int *integer)
{
printf("Enter five digit integer:\n");
scanf("%i",integer);
int digit1=integer/10000;
int digit2=(integer%10000)/1000;
int digit3=(integer%1000)/100;
int digit4=(integer%100)/10;
int digit5=(integer%10)/1;
const char *digit1c[10];
const char *digit2c[10];
const char *digit3c[10];
const char *digit4c[10];
const char *digit5c[10];
(还有更多,但这似乎是问题,我会根据要求添加其余部分。)
然后它返回此错误:
math2.h:44:20: error: invalid operands to binary / (have ‘int *’ and ‘int’)
math2.h:45:21: error: invalid operands to binary % (have ‘int *’ and ‘int’)
math2.h:46:21: error: invalid operands to binary % (have ‘int *’ and ‘int’)
math2.h:47:21: error: invalid operands to binary % (have ‘int *’ and ‘int’)
math2.h:48:21: error: invalid operands to binary % (have ‘int *’ and ‘int’)
我知道它与我用来初始化数字的运算符有关,我确实尝试将它们的类型更改为“int *”,但这不起作用。 那么这里到底发生了什么?
答案 0 :(得分:13)
integer
是指针到int
(int*
),因此当您想要使用它指向的int时,您需要取消引用它:
int digit1=(*integer)/10000; // and so on...
答案 1 :(得分:4)
参数integer
不是int
个对象;它是一个int*
对象,即一个指针。 (并且integer
是指针对象的误导性名称。)
如果你改变:
int digit1=integer/10000;
到
int digit1 = *integer / 10000;
并对其余代码进行相应的更改,至少会编译。 integer
是一个指针; *integer
是它所指向的int
对象。
(另外,二元运算符周围的空格会使你的代码更容易阅读。使用空格的另一个好理由是,如果除法被颠倒了,那么:
int digit1=10000/*integer;
会引入/* ... */
评论。)
答案 2 :(得分:4)
此处的问题是integer
的类型是int *
,这是一个不支持/
和%
的运算符的指针。您的问题有两种解决方案。
取消引用integer
,每次使用*
运算符时都使用int digit1=(*integer)/10000;
运算符。
例如integer
将int
更改为&
类型。您必须更改函数的签名,并且必须更改scanf以使用scanf("%i",&integer);
运算符{{1}}