C++ وجود cin يقرأ حرف الإرجاع
سؤال
كنت أتساءل عن كيفية الاستخدام cin
بحيث إذا لم يدخل المستخدم أي قيمة ويدفع فقط ENTER
الذي - التي cin
سوف يتعرف على هذا كمدخل صالح.
المحلول
ربما تريد أن تجرب std::getline
:
#include <iostream>
#include <string>
std::string line;
std::getline( std::cin, line );
if( line.empty() ) ...
نصائح أخرى
أجد ذلك لإدخال المستخدم std::getline
يعمل بشكل جيد جدا.
يمكنك استخدامه لقراءة سطر وتجاهل ما يقرأه.
المشكلة في فعل مثل هذه الأشياء،
// Read a number:
std::cout << "Enter a number:";
std::cin >> my_double;
std::count << "Hit enter to continue:";
std::cin >> throwaway_char;
// Hmmmm, does this work?
هو أنه إذا قام المستخدم بإدخال القمامة الأخرى على سبيل المثال."4.5 - حول" من السهل جدًا الخروج من المزامنة وقراءة ما كتبه المستخدم في المرة الأخيرة قبل طباعة المطالبة التي يحتاج إلى رؤيتها في المرة القادمة.
إذا قرأت كل سطر كامل مع std::getline( std::cin, a_string )
ثم قم بتحليل السلسلة التي تم إرجاعها (على سبيل المثالباستخدام istringstream أو تقنية أخرى) فمن الأسهل بكثير الحفاظ على تزامن المطالبات المطبوعة مع القراءة من std::cin، حتى في مواجهة المدخلات المشوهة.
هل سين.الحصول على خط حل مشكلتك؟
لاكتشاف قيام المستخدم بالضغط على مفتاح Enter بدلاً من إدخال عدد صحيح:
char c;
int num;
cin.get(c); // get a single character
if (c == 10) return 0; // 10 = ascii linefeed (Enter Key) so exit
else cin.putback(c); // else put the character back
cin >> num; // get user input as expected
بدلاً عن ذلك:
char c;
int num;
c = cin.peek(); // read next character without extracting it
if (c == '\n') return 0; // linefeed (Enter Key) so exit
cin >> num; // get user input as expected
حاول إلغاء تخزين cin مؤقتًا (يتم تخزينه مؤقتًا افتراضيًا).