سؤال

كنت أتساءل عن كيفية الاستخدام 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 مؤقتًا (يتم تخزينه مؤقتًا افتراضيًا).

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