首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:二进制+的操作数无效(有‘int*’和‘int*’)

错误:二进制+的操作数无效(有‘int*’和‘int*’)
EN

Stack Overflow用户
提问于 2019-10-27 01:54:28
回答 2查看 97关注 0票数 0

应用程序正在获取数字,并与来自用户的数字平方,然后它计算它们如下:

代码语言:javascript
复制
2 3 4

4 5 7

2 6 8  

然后是count (2+5+8)-(4-5-2)并在屏幕上打印出来

代码语言:javascript
复制
error: invalid operands to binary + (have ‘int *’ and ‘int *’)

对于表达式:

代码语言:javascript
复制
total2+=numbers[counter1]+numbers[counter2];
代码语言:javascript
复制
    #include<stdio.h>
    int main()
    {
      int scale;

      scanf("%d",&scale);
      int clone1=scale;
      int clone2=scale;
      int numbers[scale][scale];//scale of square we enter
      int counter1=0;
      int counter2=0;

      while(clone2>0)
      {
        while(clone1>0)
        {
          scanf("%d",&numbers[counter1][counter2]);
          counter2++;
          clone1--;
        }
        clone1=scale;
        counter2=0;
        counter1++;
        clone2--;
      }

      clone1=scale;
      clone2=scale;
      counter1=0;
      int total1=0;

      while(clone1>0)
      {
        total1= numbers[counter1] + numbers[counter1] + total1;
        clone1--;
        counter1++;
      }
      int total2=0;
      counter1=0;
      counter2=scale;
      clone1=scale;

      while(clone1>0)
      {
        total2= numbers[counter1] + numbers[counter2] + total2;
        counter1++;
        counter2--;
      }
      printf("%d",total1-total2);
      return 0;
    }
EN

回答 2

Stack Overflow用户

发布于 2019-10-27 06:20:13

如果我理解正确的话,您希望计算方阵的det,在这种情况下,您应该将total1= numbers[counter1] + numbers[counter1] + total1;更改为numbers[counter1][counter1] + total1;,将total2= numbers[counter1] + numbers[counter2] + total2;更改为total2= numbers[counter1][counter2] + total2;。在您的版本中,您实际上是在尝试添加行指针,而不是计数器位置的值。在最后一个循环中,您还希望减少clone1,否则它将永远停留在循环中,因为它永远不会达到0。

票数 0
EN

Stack Overflow用户

发布于 2019-10-27 06:23:35

numbers[counter1]numbers[counter2]各自引用长度为scale的行整数。该行的类型为int* (指向整数行的指针)。+操作数对单个整数(int)进行操作。

要修复您的代码,您需要:

代码语言:javascript
复制
total1 += numbers[counter1][counter1] ;

代码语言:javascript
复制
total2 += numbers[counter1][counter2] ;

我认为-很难确定是否还有其他问题,因为你似乎把一个简单的问题搞得很复杂。我建议:

代码语言:javascript
复制
int leading_diagonal = 0 ;
int trailing_diagonal = 0 ;
for( int i = 0; i < scale; i++ )
{
    leading_diagonal += numbers[i][i] ;
    trailing_diagonal += numbers[i][scale-1-i] ;
}

printf( "%d\n", leading_diagonal - trailing_diagonal ) ;

然而,尽管您的示例需要(2+5+8)-(4-5-2),但您的代码似乎是在尝试评估(2+5+8)-(4+5+2)。如果您的示例实际上是正确的,并且是您想要的,那么:

代码语言:javascript
复制
int leading_diagonal = numbers[0][0] ;
int trailing_diagonal = numbers[0][scale-1] ;
for( int i = 1; i < scale; i++ )
{
    leading_diagonal += numbers[i][i] ;
    trailing_diagonal -= numbers[i][scale-1-i] ;
}

printf( "%d\n", leading_diagonal - trailing_diagonal ) ;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58573303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档