注册 登录
编程论坛 C++教室

其中有点代码看不明白,求帮忙

fxbszj 发布于 2012-10-16 20:01, 448 次点击
程序代码:
#include <iostream>

using namespace std;

int main()
{
        const size_t st=3;
        int ia[st],ib[st];
        //enter ia
        cout<<"Enter ia:"<<endl;
        for(size_t i=0;i!=st;++i)
                cin>>ia[i];


        cout<<"Enter ib:"<<endl; //enter ib;
        for(size_t i=0;i!=st;++i)
                cin>>ib[i];

        //compare ia and ib
        for(size_t i=0;i!=st;++i)
                if(ia[i]!=ib[i])
                        {cout<<"ia not equals to ib"<<endl;
                         return -1;}
       cout<<"ia equals to ib"<<endl;

        return 0;
}

这段代码的作用也比较明显,就是从键盘输入两个数组,程序判断两个数组是否相等.不过还是有点不明白代码这么写
假如输入的结果是不相等的,ia[i]!=ib[i]成立,会执行花括号里面的内容,那为什么后面那句cout<<"ia equals to ib"<<endl;是怎么做到不执行的;
我试着改成这样:
 for(size_t i=0;i!=st;++i)
                if(ia[i]!=ib[i])
                        {cout<<"ia not equals to ib"<<endl;
                         return -1;}
                else
                       {cout<<"ia equals to ib"<<endl;
                        return 0;}
问题来了,假如我分别输入 1 2 3 和 4 5 6,就会输出三段ia not equals to ib(原来的代码就输出一段)

高手帮帮忙,怎么理解原来那段代码
9 回复
#2
寒风中的细雨2012-10-16 20:06
相等的条件是  下标相同的元素都要满足相等的条件


不相等  只要一个不相等就可以等处结论  是不相等的

所以你写的else  是不对的   除非是  比较最后一个元素了  然后最后一个元素也相等 则可以说是相等
                if(ia[i]!=ib[i])
                        {cout<<"ia not equals to ib"<<endl;
                         return -1;}
                else if (st-1 == i)//
                       {cout<<"ia equals to ib"<<endl;
                        return 0;}
#3
fxbszj2012-10-16 20:15
回复 2楼 寒风中的细雨
是不是这么理解,整个main函数是在return n;后结束的
如何if成立,就执行了花括号里面那段,程序就结束了,后面的都不会执行了。只有if不成立,才会执行后面那段cout和return,然后程序结束
#4
小小小火柴2012-10-16 22:25

#include <iostream>

using namespace std;

int main()
{
        const size_t st=3;
        int ia[st],ib[st];
        int i;
        //enter ia
        cout<<"Enter ia:"<<endl;
        for( i=0;i!=st;++i)
                cin>>ia[i];


        cout<<"Enter ib:"<<endl; //enter ib;
        for( i=0;i!=st;++i)
                cin>>ib[i];

        //compare ia and ib
        for( i=0;i!=st;++i)
                if(ia[i]!=ib[i])
                        {cout<<"ia not equals to ib"<<endl;
                         return -1;}
       cout<<"ia equals to ib"<<endl;

        return 0;
}
 这段代码没错啊!除了楼主你的 i 没有定义之外,其他都没问题。功能也应该是正确的。
#5
rossmonica2012-10-17 15:25
const size_t st=3
 为什么定义初始值为3?菜鸟求指导
#6
fxbszj2012-10-18 17:40
回复 4楼 小小小火柴
我的代码是有定义的,siz_t类型的。你的那段代码才没有定义
#7
fxbszj2012-10-18 17:41
回复 5楼 rossmonica
因为我用的是数组,st代表数组的容量,const定义后不可更改st的值
#8
xu_daochun2012-10-24 16:02
把赋值当成逻辑了
#9
stuniversity2012-10-24 20:17
以下是引用fxbszj在2012-10-16 20:15:57的发言:

是不是这么理解,整个main函数是在return n;后结束的
如何if成立,就执行了花括号里面那段,程序就结束了,后面的都不会执行了。只有if不成立,才会执行后面那段cout和return,然后程序结束
fxbszj说得没错,只要在if里面的条件不成立,输出ia not equals to ib后,一旦执行return,程序就会马上结束。因为只要两个数组的第一个元素不相等则可判定这两个数组不等,所以可以直接用return结束,不用再比较剩下的元素。所以原来的程序是没有问题的。
但楼主修改后的程序一旦第一个元素相等则马上输出ia equals to ib,然后结束程序,没有比较完。
#10
额外覆盖2012-10-25 14:57
受教了
1