首先,这个程序在visual studio 2017上输出结果是完全正确的甚至6.0也对,输出结果和官网例子一样。但是在网站上用c++ (g++)编译就不行,测试官网那个例子“1234567890987654321123456789”最后只会输出第一位“yi"。
#include <iostream>
using namespace std;
int main()
{
int m, M, j, sum = 0, p = 1, i = 0;
char a[11][5] = { "ling","yi","er","san","si","wu","liu","qi","ba","jiu" };
char b[101];
cout << "input:";
cin >> b;
while (b[i])
{
sum = sum + b[i] - '0';
i++;
}
M = sum;
while (sum >= 10)
{
sum = sum / 10;
p = p * 10;
}
while (p)
{
m = M / p;
M = M % p;
p = p / 10;
for (j = 0; j < 5; j++)
cout << a[m][j] ;
cout << " " ;
}
return 0;
}
然后我调了半天,发现错误在for那里,因为例如”yi"它存入数组只使用了a[1][0],a[1][1],而for接下来会继续往下走走到a[1][2],导致while循环终止(个人理解,因为我的while确实不循环了)。
接下来我又尝试了如下:
#include <iostream>
int main()
{
int i = 0, j = 0;
char c[7] = "char";
for (i = 0; i < 4; i++)
for (j = 0; j < 6; j++)
cout << c[j];
return 0;
}
发现当j<4循环正常,输出四个char,j<5、6之类就只会输出一个,但是用visual studio 2017就一切正常,请问为什么。我倒是想过数组越界,但是又不像,个人能力太低,所以就来提问了。
没接触过g++,希望不要是什么很低级的错误要不然就太丢脸了。
因为数组长度为7,所以j=6不存在越界问题
c[7]中,前四个是字符c,h,a,r,后三个是0,ASCII码的0值。输出来也不可见。