0

好吧,不是随机的,因为每次都一样,但是

#include<iostream>
using namespace std;
int main()
{
    char box[10][10];
    for(int i=-1;i<11;i++)
    {
        cout<<"---------------------"<<endl<<"|";
        for(int j=0;j<10;j++)
        {
            cout<<box[j][i]<<"|";
        }
        cout<<endl;
    }
    intx;cin>>x;
    return 0;
}

输出一系列国际字符(好吧,并非所有字符本身都是“国际”,但我得到了诸如 pi 和西班牙倒问号之类的东西)。无论如何,我知道这是因为程序访问字符尚未初始化,但为什么特定值会创建特定符号,符号的 ASCII 值是什么(如果它们具有 ASCII 值)以及如何在没有故障的情况下获得符号我的程序?

4

5 回答 5

3

你的循环我没有意义......

for(int i=-1;i<11;i++)

当您在此处引用框时,这将命中两个无效的索引 -1 和 10:

cout<<box[j][i]<<"|";

与其他循环一样,它应该是 0 到 < 10。

此外,您还没有将 box 的内容初始化为任何内容,因此您正在打印未初始化的内存。你必须先把东西放进你的“盒子”,然后才能拿出任何东西。

符号本身可能是扩展的 ASCII,您可以通过任何扩展的 ASCII 表来获取它们。 这个首先出现在谷歌上。例如,您可以这样做:

cout << "My extended ascii character is: " << (char)162 << endl;

得到一个疯狂的国际o。

于 2009-05-23T19:48:43.580 回答
2

出于同样的原因

#include <iostream>
using namespace std;
int main()
{
   int x;
   cout << x;
}

显示一个随机值。未初始化的变量(或数组)包含垃圾。

于 2009-05-23T19:51:05.727 回答
0

for(int i=-1;i<11;i++)

那条线是可疑的。-1 到 10?应该是 0 到 9。

于 2009-05-23T19:50:08.787 回答
0

ASCII码是

(int)(box[j][i])

您只需打印普通char的 s,它们是 ASCII 字符,代码从 0 到 255。当打印wchar_ts 时,相同的内存被解释为其他字符。

你的循环应该在 [0; 10[不在[-1; 11[

于 2009-05-23T19:51:42.450 回答
0

程序显示的符号取决于:

  • 恰好在未初始化变量中的内容,以及
  • 您计算机的语言环境或演示文稿中使用的编码。

Unicode 参考可能是识别显示特定符号所需的代码的最佳来源。

考虑到您的用户可能没有默认选择相同的编码(或具有正确符号的字体)。您应该检查当前语言环境,或者强制使用特定于您的输出的语言环境,以确保您的输出呈现您希望的方式。

于 2009-05-23T20:06:48.207 回答