#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";
}
我已经编写了这段代码,当使用加法部分时,它工作得很好,但是当乘法完成时,它没有给出最终的乘积。每当我单击'='时,乘法时都不会得到任何最终乘积,但是在加法时,相同的逻辑就可以正常工作。
答案 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]
的值在“条件”中是错误的,您将超出数组的范围,这也会导致未定义的行为。