簡體   English   中英

為什么該程序顯示看似隨機的字符? (C ++)

[英]Why does this program display seemingly random characters? (C++)

好吧,不是隨機的,因為每次都一樣,但是

#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值)以及如何在不出現故障的情況下獲取這些符號?我的程序?

你的循環我沒有意義...

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

當您在此處引用框時,這將擊中兩個無效的索引-1和10:

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

與其他循環一樣,它應為0到<10。

另外,您還沒有將box的內容初始化為任何內容,因此您正在打印未初始化的內存。 您必須在“盒子”中放入一些東西,然后才能取出任何東西。

這些符號本身可能是擴展的ASCII,您可以通過任何擴展的ASCII表獲得它們。 這個首先出現在Google上。 例如,您可以執行以下操作:

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

得到一個瘋狂的國際o。

出於同樣的原因

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

顯示一個隨機值。 未初始化的變量(或數組)包含垃圾。

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

那條線是可疑的。 -1到10? 應該是0到9。

ASCII碼是

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

您只打印普通char ,它們是ASCII字符,代碼范圍從0到255。當打印wchar_t ,同一內存被解釋為其他字符。

您的循環應位於[0; 10 [不在[-1; 11 [

程序顯示的符號取決於:

  • 恰好在未初始化變量中的內容,以及
  • 您計算機的語言環境或演示中使用的編碼。

Unicode參考可能是識別顯示特定符號所需代碼的最佳來源。

請考慮您的用戶可能沒有默認選擇相同的編碼(或帶有正確符號的字體)。 您應該檢查當前的語言環境,或強制使用特定於您的輸出的語言環境,以確保您的輸出呈現所需的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM