关于一个求和小程序,无意间的发现。

CHFKLIN2013 发布于 2013/12/04 22:22
阅读 1K+
收藏 1
c++
#include "stdafx.h"
#include<iostream>
using namespace std;

int r(int num);

int main()
{
    int n;
    cout<<"Please Enter a number and press ENTER:";
    cin>>n;
    cout<<"总和为:"<<r(n)<<endl;
    return 0;
}
int r(int n){
    int i;
    int sum=0;
    for(i=1,i<=n;i++;)                            //此处有两个错误
        sum=sum+i;
    return sum;
}

该段程序是书上的一个程序,在手动录入的时候有点小误差,导致最后编译结果如下图。

这很奇怪,双斜杠标记处有两个错误,但是程序竟然编译通过了,但是结果却让人不明白,谁能解释下这个结果是如何产生的?

加载中
0
pcxsvl
pcxsvl

for(i=1,i<=n;i++;)应改为:

    for(i=1;i<=n;i++)

如不改初始时i=1;条件为i++,只有加到溢出时才会变为0(即假)才会结束循环

0
杨同学
杨同学
语法没错所以能编译通过,有种表达式叫逗号表达式
0
杨同学
杨同学
那个循环应该是运行到i++ 溢出变成0的时候退出的
ericsoul
ericsoul
这个是正解。
0
湖心亭看雪
湖心亭看雪
楼主骗人。明明没有错。只不过n没用上
0
猎户座
猎户座
没发现什么深奥的技巧啊?
0
欣儿
欣儿
到i最大时,求和停止。可以看看是不是
0
ueharaai
ueharaai
for循环里分号标错了。
实迷途其未远觉今是而昨非
实迷途其未远觉今是而昨非
语法没错,逻辑错了
0
a
adan2013
把i=1后面逗号改分号,否则,i一直会加加,直到最大值
0
LucEsape
LucEsape
for(i=1,i<=n;i++;)   
// 改成这样  for(i = 1; i <= n; i++)



返回顶部
顶部