想问下linux gcc编译和vc6.0编译过程的区别
我用一个while循环通过gcc编译后输出的结果和vc6.0输出的结果不一样.我想知道为什么比如下段代码:#include<stdio.h>intmain(void){i...
我用一个while循环 通过gcc编译后 输出的结果和vc6.0输出的结果不一样.我想知道为什么
比如下段代码:
#include <stdio.h>
int main (void)
{
int n,i,sum;
n=0;
sum=0;
while (i>10){
scanf("%d",&i);
if (i==0)
continue;
sum+=1;
n++;
printf("%d%d%d",n,sum,i);
}
}
比如说我在linux命令行输入13 那么此时n=13
结果
linux平台 :n=1 , sum=0 , i=13
vc平台: n=1, sum=1 , i=13 为什么sum=1??
就算vc采用ms标准库 就算vc和gcc有区别 但算法应该是一样的啊.. 为什么会出现这个情况啊??
说一下 上述代码是c代码..只不过我是想了解一下 调试过程所以在vc++中调试的. 展开
比如下段代码:
#include <stdio.h>
int main (void)
{
int n,i,sum;
n=0;
sum=0;
while (i>10){
scanf("%d",&i);
if (i==0)
continue;
sum+=1;
n++;
printf("%d%d%d",n,sum,i);
}
}
比如说我在linux命令行输入13 那么此时n=13
结果
linux平台 :n=1 , sum=0 , i=13
vc平台: n=1, sum=1 , i=13 为什么sum=1??
就算vc采用ms标准库 就算vc和gcc有区别 但算法应该是一样的啊.. 为什么会出现这个情况啊??
说一下 上述代码是c代码..只不过我是想了解一下 调试过程所以在vc++中调试的. 展开
4个回答
展开全部
二楼四楼都说得很明白了,你这个是 while 循环,即 "当" 型,do...while 是 "直到" 型。while 循环就是不满足就不执行了,而 do...while 则是执行一次完了再判断是否满足以决定是否继续执行。如二楼所说,你的 i 并没有赋初始值,它的值是未确定的,但是却直接用 while(i > 10) 来判断是否进入循环。不同编译器对于未赋值的初始变量处理方式是不一样的。分配一段内存空间,有可能这块内存并没有清零是分配之前的值,也有可能是某一个特定值,比如 0。我自己也测试过分配一个字符串,然后看每个字节的字符,结果是一堆乱七八糟的符号。
展开全部
你的这个程序在linux下是不会出来n=1 , sum=0 , i=13吧
i没有初始化,gcc把它初始化成0,进不去while 循环
vc里它是个很大的随机值,可以进入循环
只要你进入了循环,i又没有输入0,那sum+=1;就会执行,sum的值当然是1了
i没有初始化,gcc把它初始化成0,进不去while 循环
vc里它是个很大的随机值,可以进入循环
只要你进入了循环,i又没有输入0,那sum+=1;就会执行,sum的值当然是1了
更多追问追答
追问
老大 我都说了 比如 输入13 有没有认真看啊...
追答
老大,你输入13是在循环里面好不好,有没有认真分析自己的程序啊
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
i的初值是什么?这么写程序不规范。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-11-23
展开全部
千年
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询