为什么这个程序显示看似随机的字符? (C ++)

时间:2009-05-23 19:46:05

标签: c++ special-characters

嗯,不是随意的,因为它每次都一样,但是

#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值)以及如何在没有毛刺的情况下获得符号我的节目?

5 个答案:

答案 0 :(得分:3)

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

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

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

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

应该是0到&lt; 10喜欢另一个循环。

此外,您还没有将框的内容初始化为任何内容,因此您打印的是未初始化的内存。在你拿出任何东西之前,你必须把东西放进你的“盒子里”。

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

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

获得一个疯狂的国际o。

答案 1 :(得分:2)

出于同样的原因

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

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

答案 2 :(得分:0)

  
    

for(int i = -1; i&lt; 11; i ++)

  

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

答案 3 :(得分:0)

ASCII码是

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

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

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

答案 4 :(得分:0)

程序显示的符号取决于:

  • 恰好位于未初始化变量中的内容和
  • 您的计算机的区域设置或演示文稿中使用的编码。

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

请考虑您的用户可能没有默认选择的相同编码(或带有正确符号的字体)。您应该检查当前的区域设置,或者强制输出特定的区域设置,以确保输出呈现您希望的方式。