无法获得乘法输出

时间:2019-11-04 14:15:17

标签: c++

#include<iostream.h>
int main()
{
  int n[50],p=0;
  double g=1;
  char c;
  cout<<"\n press a for addition";
  cout<<"\n press m for multiplication";
  cin>>c;
  if(c=='a')
  {
    for(int i=0;n[i]=!'=',i<50;i++)
    {
      cin>>n[i];
      p+=n[i];
    }
    cout<<p;
  }
  else if(c=='m')
  {
    for(int j=0;n[j]=!'=',j<50;j++)
    {
      cin>>n[j];
      g*=n[j];
    }
    cout<<g;
  }
  else cout<<"wrong input";
}

我已经编写了这段代码,当使用加法部分时,它工作得很好,但是当乘法完成时,它没有给出最终的乘积。每当我单击'='时,乘法时都不会得到任何最终乘积,但是在加法时,相同的逻辑就可以正常工作。

1 个答案:

答案 0 :(得分:3)

您有多个问题:

  • 数组n未初始化,因此其内容将不确定,并且使用不确定的值会导致不确定的行为

  • (对您而言)幸运的是,循环“条件”表达式n[j]=!'=',j<50并没有像您认为的那样起作用... n[j]=!'='部分实际上等于{{1} }。也就是说,您将n[j] = !'='的结果分配给!'='

  • 关于循环“条件”,n[j]的结果是n[j]=!'=',j<50 的结果,因为comma operator的工作方式

  • 使用j<50不能读取任意字符,因为cin>>n[j]n[j],并且您只能读取int值。从输入中获取int的唯一方法是,如果用户输入的值'='恰好是61的ASCII编码值。

  • 您的循环“条件”还存在另一个缺陷,因为在检查'='之前增加了j,因此条件n[j]将始终是数组的元素您还没有读懂的东西。

  • 并基于上一点,因为n[j]的值在“条件”中是错误的,您将超出数组的范围,这也会导致未定义的行为