[英]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.