سؤال

في وقت ما، قمت ببعض تعلم لغة C وC++ في الكلية، لكنني لم أحظى بالكثير من الاهتمام بـ C++.الآن أود أن أولي بعض الاهتمام لـ C++ ولكن عندما أستخدم ملف getch() وظيفة، أحصل على التحذير من الأسفل.

تحذير C4996:"الحصول على":تم إهمال اسم POSIX لهذا العنصر.بدلاً من ذلك، استخدم الاسم المتوافق مع ISO C++:_get.راجع المساعدة عبر الإنترنت للحصول على التفاصيل.

الآن، أنا أستخدم VS 2005 Express، ولا أعرف ماذا أفعل حيال هذا التحذير.أحتاج إلى استخدام getch() بعدي printf() رسالة خطأ أو أي شيء آخر يتطلب الضغط على المفتاح.

هل يمكنك مساعدتي مع هذا؟

هل كانت مفيدة؟

المحلول

قررت Microsoft وضع علامة على الاسم بدون الشرطة السفلية مهملة، لأن هذه الأسماء محفوظة ليختارها المبرمج.يجب أن تستخدم الإضافات الخاصة بالتنفيذ أسماء تبدأ بشرطة سفلية في مساحة الاسم العامة إذا كانت ترغب في الالتزام بمعيار C أو C++ - أو يجب عليها وضع علامة على نفسها كبيئة متوافقة مع المعايير المدمجة، مثل POSIX/ANSI/ISO C، حيث يكون مثل هذا تتوافق الوظيفة بعد ذلك مع أحد تلك المعايير.

يقرأ هذه الإجابة حول getcwd() أيضًا، للحصول على تفسير من P.ج.بلوجر، الذي يعرف الأشياء جيدًا بالطبع.

إذا كنت مهتمًا فقط بانتظار بعض المفاتيح التي يكتبها المستخدم، فلا يوجد سبب لعدم استخدامها getchar.ولكن في بعض الأحيان يكون استخدامه أكثر عملية وملاءمة للمستخدم _getch والأصدقاء.ومع ذلك، لم يتم تحديدها بواسطة معيار C أو C++، وبالتالي ستحد من إمكانية نقل برنامجك.ضع ذلك في الاعتبار.

نصائح أخرى

إذا كنت في C ++، لماذا printf وgetch؟ النظر في استخدام cout وcin.get بدلا من ذلك.

واستخدام _getch () بدلا من getch ()

وماذا كنت بحاجة إلى هذا؟ لماذا لا تستخدم getchar() إذا كنت بحاجة لالتقاط حرف واحد؟

وكما يقول الخطأ، تم إهمال في getch() اسم (كما كان ذلك تمديد مايكروسوفت محددة)، وأوصى _getch() بدلا من ذلك. أنا لست متأكدا من أين يأتي POSIX فيه. POSIX لا يعرف getch()، ولكن بدلا من ذلك تتضمن getchar() كما هو محدد من قبل ISO C معيار (صفحة 298، مشروع ترتبط لأن المعيار النهائي ليست حرة). سيكون الحل أن تفعل كما اقترح واستخدام _getch()، أو استخدام C getchar() المعيار.

ويمكنك استخدام "الأمراض المنقولة جنسيا :: getc (ستدين)؛". وهي تعمل مثل "getch ()؛" في برامجي. اعتقد انها بديل جيد ل 'getch ()' إذا كنت مخطئا، قل لي.

#include <cstdio>

switch (std::getc(stdin)) {
    case 'a':   cout << 'a' << endl ; break;
    case 'b':   cout << 'b' << endl ; break;
    default:    cout << '$' << endl; break;
}

وذلك بإخراج "أ" إذا دخل "أ" على وحدة التحكم.

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