问题描述
- 同样代码VC6.0结果正确,GCC编译运行结果不正确,原因是什么呢?谢谢!
-
#includeint main()
{
char deno[1000]={''},num,i=0,remain=0;
scanf("%s %d",deno,&num); //获取被除数、除数
if(!num) return (-1);while(deno[i]!='') 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]=''; //串尾 remain/=10; //最后余数 if(deno[0]=='0'&&deno[1]!='') //高位0不显示 printf("%s %d",&deno[1],remain); else printf("%s %d",deno,remain); return 0;
}
解决方案
(gdb) n
12 4
Breakpoint 1, main (argc=1, argv=0x7fffffffe288) at source.c:7
7 if(!num) return (-1);
(gdb) p deno
$1 = '00'
(gdb) p deno[0]
$2 = 0 '00'
(gdb)
解决方案二:
会不会是gcc大小端的问题?
解决方案三:
我也不知道为什么代码插入进去会这样子 - - 试过几次了 第一次发帖问
解决方案四:
我不想改下去了。在这里你有些概念不清。
这里跟小端大端的数据存储方式没有什么关系。数组本身就是连续存放的单元,不存在什么小端大端的存储问题。
解决方案五:
scanf(“%s %d”,deno,&num);
在这里,你给编译器出了一个难题!%s %d ,在这个输入中%s为字符串,那我问你——空格算不算字符?
vc强大,能替你解决这些问题,用空格来区分两个输入。
gcc个性,直接罢工。你输入的字符串永远不会被读入并存储到字符数组中,字符数组的每一项都是0,结果也就为0了。
所以,取决于你要用哪个!我还是建议你 改改自己的代码,注意编码风格!加上该加的空格!
言尽于此!
时间: 2024-11-17 04:47:06