voidUniverse
2016-03-17 05:48
采纳率: 66.7%
浏览 2.3k

同样代码VC6.0结果正确,GCC编译运行结果不正确,原因是什么呢?谢谢!

#include

int main()
{
char deno[1000]={'\0'},num,i=0,remain=0;
scanf("%s %d",deno,&num); //获取被除数、除数
if(!num) return (-1);

while(deno[i]!='\0')    
    deno[i++]-='0'; //转换成数字
deno[i]='#';        //结束标志
i=0;
while(deno[i]!='#')
{
    deno[i]+=remain;            //低位+高位余数
    remain=10*(deno[i]%num);    //高位余数
    deno[i]=deno[i]/num+'0';    //商的ASCII码    
    i++;
}
deno[i]='\0';   //串尾
remain/=10;     //最后余数

if(deno[0]=='0'&&deno[1]!='\0') //高位0不显示
    printf("%s %d",&deno[1],remain);
else
    printf("%s %d",deno,remain);
return 0;

}

VC++6.0下运行结果:
图片说明
图片说明
图片说明
GCC编译后运行结果:
图片说明

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • longyu_wlz 2016-03-21 00:41
    已采纳

    (gdb) n
    12 4

    Breakpoint 1, main (argc=1, argv=0x7fffffffe288) at source.c:7
    7 if(!num) return (-1);
    (gdb) p deno
    $1 = '\000'
    (gdb) p deno[0]
    $2 = 0 '\000'
    (gdb)

    点赞 打赏 评论
  • voidUniverse 2016-03-17 05:53

    我也不知道为什么代码插入进去会这样子 - - 试过几次了 第一次发帖问

    点赞 打赏 评论
  • gameuu 2016-03-17 13:48

    会不会是gcc大小端的问题?

    点赞 打赏 评论
  • longyu_wlz 2016-03-21 01:05

    我不想改下去了。在这里你有些概念不清。
    这里跟小端大端的数据存储方式没有什么关系。数组本身就是连续存放的单元,不存在什么小端大端的存储问题。

    点赞 打赏 评论
  • longyu_wlz 2016-03-21 01:18

    scanf(“%s %d”,deno,&num);
    在这里,你给编译器出了一个难题!%s %d ,在这个输入中%s为字符串,那我问你——空格算不算字符?
    vc强大,能替你解决这些问题,用空格来区分两个输入。
    gcc个性,直接罢工。你输入的字符串永远不会被读入并存储到字符数组中,字符数组的每一项都是0,结果也就为0了。
    所以,取决于你要用哪个!我还是建议你 改改自己的代码,注意编码风格!加上该加的空格!
    言尽于此!

    点赞 打赏 评论

相关推荐 更多相似问题