لماذا يعرض البرنامج شخصيات عشوائية على ما يبدو؟ (C ++)

StackOverflow https://stackoverflow.com/questions/902309

  •  05-09-2019
  •  | 
  •  

سؤال

حسنا، ليس عشوائيا، لأنها هي نفسها في كل مرة، ولكن

#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 مثل الحلقة الأخرى.

كما لم تتم تهيئة محتويات المربع إلى أي شيء، فأنت تطبع ذاكرة غير مهيأة. يجب عليك وضع شيء في صندوق "الخاص بك" قبل أن تتمكن من تناول أي شيء.

ربما تم توسيع الرموز نفسها ASCII، يمكنك الحصول عليها من خلال أي جدول ASCII الموسع. هذا جاء أولا على جوجل. على سبيل المثال، يمكنك القيام به:

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

للحصول على مجنون الدولية س.

نصائح أخرى

لنفس السبب في ذلك

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

يعرض قيمة عشوائية. المتغيرات غير المنصوص عليها (أو صفائف) تحتوي على القمامة.

ل (INT I = -1؛ أنا <11؛ I ++)

هذا الخط مشتبه به. -1 إلى 10؟ يجب أن يكون 0 إلى 9.

رمز ASCII هو

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

أنت فقط طباعة عادي charS التي هي أحرف ASCII مع رموز من 0 إلى 255. عند الطباعة wchar_tيتم تفسير نفس الذاكرة كحرف أخرى.

يجب أن تكون حلقة الخاص بك في [0؛ 10 [ليس في [-1؛ 11 [

تعتمد الرموز المعروضة بواسطة البرنامج على:

  • المحتويات التي تحدث في المتغيرات غير المنصوص عليها، و
  • لغة جهاز الكمبيوتر الخاص بك أو الترميز المستخدمة في العرض التقديمي.

من المحتمل أن يكون مرجع يونيكود هو أفضل مصدر لتحديد الرموز المطلوبة لعرض رموز معينة.

اعتبر أن المستخدمين قد لا يكون لديهم نفس الترميز (أو الخطوط باستخدام الرموز الصحيحة) المحددة افتراضيا. يجب عليك إما التحقق من الإعدادات المحلية الحالية، أو فرض مجموعة واحدة محددة لإخراجك لضمان تمنح الإخراج بالطريقة التي ترغب فيها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top