نمایش نتایج 1 تا 7 از 7

نام تاپیک: عدم اجرای تابع ()getline

  1. #1
    کاربر دائمی آواتار emadfa
    تاریخ عضویت
    اسفند 1387
    محل زندگی
    رشت
    پست
    193

    Question عدم اجرای تابع ()getline

    سلام
    امروز زمانی که قصد نوشتن یک برنامه را داشتم مشکلی پیش آمد که به نوعی جالب بود ( و البته تعجب بر انگیز) ! و آن این که زمانی که در یک برنامه برای ورودی یک رشته از تابع ()getline استفاده کردم در هنگام اجرای برنامه این تابع اجرا نمی شد. البته دلیل این مساله را هم با مثالی مشابه یافتم! هرگاه قبل از اجرای تابع ()getline ( نه دقیقا خط قبل بلکه حتی خطوط قبل از آن ) حداقل یک تابع cin برای ورودی استفاده شود دیگر تابع ()getline اجرا نمی شود. ( به نوعی که انگار کامپایلر در هنگام کامپایل آن را ignore کرده است! )
    از دوستان اگر کسی در مورد علت این مساله و چاره ( چون گاهی نیاز است که از هر دو دستور ورودی در برنامه استفاده کنم! ) آن اطلاعی دارد لطفا کمک کنید.
    string partNumber, partDescript;
    int quantity, price;

    cout << "Enter the product name: ";
    cin >> partNumber;

    cout << "Enter the description of the product: ";
    getline(cin ,partDescript);



    cout << "Enter the product quantity: ";
    cin >> quantity;

    به عنوان مثال در نمونه کد بالا تابع getline اجرا نشده و دو دستور cout بلافاصله بعد از هم اجرا می شوند.

  2. #2
    کاربر دائمی
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    ایران سرای من است
    پست
    2,655

    نقل قول: عدم اجرای تابع ()getline

    سلام
    کدتان را بصورت زیر اصلاح کنید.

    string partNumber, partDescript;
    int quantity, price;

    cout << "Enter the product name: ";
    cin >> partNumber;

    cout << "Enter the description of the product: ";
    cin>>ws; // این کد باعث میشود که خط زیر برای دستور زیر تنظیم شده باشد.
    cin.getline(partDescript, 32);
    cout << "Enter the product quantity: ";
    cin >> quantity;

    اگر کلاس فوق را من طراحی کرده بودن این کار را انجام نمیدادم.

  3. #3
    کاربر دائمی آواتار emadfa
    تاریخ عضویت
    اسفند 1387
    محل زندگی
    رشت
    پست
    193

    نقل قول: عدم اجرای تابع ()getline

    با تشکر از شما دوست عزیز اما متاسفانه با قرار دادن این کد ( در تابعی که قرار است قرار است به اعضای یک کلاس مقدار اولیه دهد ) پیغام خطا دریافت می کنم.

    اگر کلاس فوق را من طراحی کرده بودن این کار را انجام نمیدادم.
    چرا؟؟
    آخرین ویرایش به وسیله emadfa : جمعه 06 شهریور 1388 در 12:53 عصر

  4. #4
    کاربر دائمی آواتار clover
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    اصفهان - اراک
    پست
    646

    نقل قول: عدم اجرای تابع ()getline

    کد را به شکل زیر هم می توان تغییر داد که نزدیکتر به کد شماست :

    string partNumber, partDescript;
    int quantity, price;

    cout << "Enter the product name: ";
    cin >> partNumber;

    cout << "Enter the description of the product: ";
    cin >>ws;
    getline(cin ,partDescript);

    cout << "Enter the product quantity: ";
    cin >> quantity;


    البته یاد آوری می کنم که تابع ()getline پارامتر سومی هم داره که کاراکتر پایان خط را مشخص میکنه و فکر می کنم به صورت پیش فرض '\n' باشه که با تغییر به ' ' مشکل حل می شود و نیازی به هیچ تغییری نیست :

    getline(cin ,partDescript, ' ');


    مثال :
    string s1, s2;

    cout << "Enter a sentence (use <space> or <Enter> as the delimiter): ";
    cin >> s1;
    cout << "You entered: " << s1 << endl;

    cout << "Enter a sentence (use <space> as the delimiter): ";
    getline(cin, s2, ' ');
    cout << "You entered: " << s2 << endl;
    آخرین ویرایش به وسیله clover : جمعه 06 شهریور 1388 در 16:41 عصر

  5. #5
    کاربر دائمی
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    ایران سرای من است
    پست
    2,655

    نقل قول: عدم اجرای تابع ()getline

    نقل قول نوشته شده توسط emadfa مشاهده تاپیک
    با تشکر از شما دوست عزیز اما متاسفانه با قرار دادن این کد ( در تابعی که قرار است قرار است به اعضای یک کلاس مقدار اولیه دهد ) پیغام خطا دریافت می کنم.
    خطاش کجاست کدها که استاندارد هستند؟

  6. #6
    کاربر دائمی آواتار hoax3r
    تاریخ عضویت
    مهر 1386
    محل زندگی
    تهران
    پست
    171

    نقل قول: عدم اجرای تابع ()getline

    قبل اینکه از getline استفاده کنی این دستور cin.sync() رو وارد کن

    cin.sync();

    cout << "Enter the description of the product: ";
    getline(cin ,partDescript);

  7. #7
    کاربر دائمی آواتار emadfa
    تاریخ عضویت
    اسفند 1387
    محل زندگی
    رشت
    پست
    193

    نقل قول: عدم اجرای تابع ()getline

    نقل قول نوشته شده توسط hoax3r مشاهده تاپیک
    قبل اینکه از getline استفاده کنی این دستور cin.sync() رو وارد کن

    cin.sync();

    cout << "Enter the description of the product: ";
    getline(cin ,partDescript);
    از همه دوستان به خصوص شما دوست عزیز متشکرم. مشکل برطرف شد.

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •