انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید

نویسنده موضوع: من یک مشکل با cin.getline در ++C دارم {حل شد}  (دفعات بازدید: 2508 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین amin-asa

  • Full Member
  • *
  • ارسال: 161
  • جنسیت : پسر
سلام دوستان

موقع اجرا این برنامه وقتی که از من ورودی می خواد من یک رشته که ۱۰ کاراکتر داشته باشه رو وارد میکنم حلقه یکبار اجرا میشه و ۷ کاراکتر رو چاپ میکنه اما بار بعد از حلقه خارج میشه.  متغیر ما که ۸۰ کاراکتر جا داره پس چرا این اتفاق میفته؟

#include <iostream>
using namespace std;

int main() {
char line[80];

do {
cin.getline(line, 8);
if (*line)
cout << "\t[" << line << "]\n";
} while (*line);

cout << endl;
return 0;
} // end of main function

« آخرین ویرایش: 18 آذر 1392، 11:35 ب‌ظ توسط amin-asa »
* زندگی خالی نیست *
* مهربانی هست، سیب هست، ایمان هست *
* آری تا شقایق هست، زندگی باید کرد *

آفلاین doomhammer65ir

  • High Hero Member
  • *
  • ارسال: 1572
  • جنسیت : پسر
    • IRAN Backup
پاسخ : مشکل با cin.getline
« پاسخ #1 : 18 آذر 1392، 12:50 ق‌ظ »
cin.getline(line, 8);cin.getline(line, 81);

آفلاین xubuntu4iran

  • Hero Member
  • *
  • ارسال: 748
  • جنسیت : پسر
پاسخ : مشکل با cin.getline
« پاسخ #2 : 18 آذر 1392، 12:53 ق‌ظ »
تو عنوانت بنویس c++ :)

آفلاین amin-asa

  • Full Member
  • *
  • ارسال: 161
  • جنسیت : پسر
پاسخ : مشکل با cin.getline
« پاسخ #3 : 18 آذر 1392، 01:10 ق‌ظ »
cin.getline(line, 8);cin.getline(line, 81);

ممنون. این رو میدونستم. البته بجای ۸۱ باید ۸۰ بنویسم.

چرا وقتی ۸ باشه درست کار نمیکنه؟
* زندگی خالی نیست *
* مهربانی هست، سیب هست، ایمان هست *
* آری تا شقایق هست، زندگی باید کرد *

آفلاین xubuntu4iran

  • Hero Member
  • *
  • ارسال: 748
  • جنسیت : پسر
من یک مشکل با cin.getline در ++C دارم
« پاسخ #4 : 18 آذر 1392، 01:15 ق‌ظ »
بهتر بود عنوان رو فارسی انتخاب می‌کردی :D

آفلاین amin-asa

  • Full Member
  • *
  • ارسال: 161
  • جنسیت : پسر
پاسخ : من یک مشکل با cin.getline در ++C دارم
« پاسخ #5 : 18 آذر 1392، 01:31 ق‌ظ »
بهتر بود عنوان رو فارسی انتخاب می‌کردی :D

ضد حال بهتر از این نمیشه :)

حالا جواب سوال چیه؟
* زندگی خالی نیست *
* مهربانی هست، سیب هست، ایمان هست *
* آری تا شقایق هست، زندگی باید کرد *

آفلاین doomhammer65ir

  • High Hero Member
  • *
  • ارسال: 1572
  • جنسیت : پسر
    • IRAN Backup
پاسخ : من یک مشکل با cin.getline در ++C دارم
« پاسخ #6 : 18 آذر 1392، 02:05 ق‌ظ »
http://www.cplusplus.com/reference/istream/istream/getline/

The delimiting character is the newline character ('\n') for the first form, and delim for the second: when found in the input sequence, it is extracted from the input sequence, but discarded and not written to s.

آفلاین POo

  • Full Member
  • *
  • ارسال: 180
  • جنسیت : پسر
  • 12.04, debian testing
پاسخ : من یک مشکل با cin.getline در ++C دارم
« پاسخ #7 : 18 آذر 1392، 02:06 ق‌ظ »
آقا من اصلا نفهمیدم شما با این کد میخوای چیکار کنی، ولی چیزی که احساس کردم کد رو اینجوری تغییر دادم:
#include <iostream>
using namespace std;
int main() {

char line[80];   
int i =0;
 
cin.getline(line, 20);
   
while (*(line+i) != '~')
{
     if (*(line+i) != '\0')
{  cout <<i <<"  = [" << *(line+i) << "]  ";
        }
     else
        {  cout<<"\n";
           cin.getline(line, 20);   
           i=-1;
           }
i++;
}

cout << endl;
return 0;
} // end of main function
--------
ویرایش: یک cout رو تغییر دادم.
« آخرین ویرایش: 18 آذر 1392، 10:25 ب‌ظ توسط POo »
پدرم روضه رضوان به دو گندم بفروخت     ناخلف باشم اگر من به جوی نفروشم

آفلاین amin-asa

  • Full Member
  • *
  • ارسال: 161
  • جنسیت : پسر
پاسخ : من یک مشکل با cin.getline در ++C دارم
« پاسخ #8 : 18 آذر 1392، 02:17 ق‌ظ »
آقا من اصلا نفهمیدم شما با این کد میخوای چیکار کنی

هدف من هم اینه:‌
من میخوام این برنامه در هر بار اجرا چند کاراکتر رو از یوزر بگیره و فقط ۷ کاراکتر اول رو چاپ کنه. ولی با این کدی که من دارم حلقه فقط یکبار اجرا مشه. چه بلای سرش میاد نمیدونم.
* زندگی خالی نیست *
* مهربانی هست، سیب هست، ایمان هست *
* آری تا شقایق هست، زندگی باید کرد *

آفلاین amin-asa

  • Full Member
  • *
  • ارسال: 161
  • جنسیت : پسر
پاسخ : من یک مشکل با cin.getline در ++C دارم
« پاسخ #9 : 18 آذر 1392، 02:20 ق‌ظ »
http://www.cplusplus.com/reference/istream/istream/getline/

The delimiting character is the newline character ('\n') for the first form, and delim for the second: when found in the input sequence, it is extracted from the input sequence, but discarded and not written to s.

یعنی چون \n رو توی ۸ کاراکتر اول پیدا نمیکنه برنامه درست کار نمیکنه؟
* زندگی خالی نیست *
* مهربانی هست، سیب هست، ایمان هست *
* آری تا شقایق هست، زندگی باید کرد *

آفلاین POo

  • Full Member
  • *
  • ارسال: 180
  • جنسیت : پسر
  • 12.04, debian testing
پاسخ : من یک مشکل با cin.getline در ++C دارم
« پاسخ #10 : 18 آذر 1392، 02:33 ق‌ظ »
هدف من هم اینه:‌
من میخوام این برنامه در هر بار اجرا چند کاراکتر رو از یوزر بگیره و فقط ۷ کاراکتر اول رو چاپ کنه. ولی با این کدی که من دارم حلقه فقط یکبار اجرا مشه. چه بلای سرش میاد نمیدونم.
حدس منم همین بود این کد که برای شما تغییر دادم تقریبا همینه منتها یک سری جاهاشو باید تغییر بدین، فکر کنم اون if  داخلی باید تغییر کنه چون اون null ، آخر رشته رو به شما میده ولی برای نمایش 7 کاراکتر اول شما میتونین به جای اون یک شرط برای i بزارین که کوچکتر از 7 باشه.
لازم هم نبود حتما از پوینتر استفاده کنین، جاهایی که مشابه این کد هست:*(line+i)رو میتونین با عضوهای آرایه عوض کنین:line[i]
پدرم روضه رضوان به دو گندم بفروخت     ناخلف باشم اگر من به جوی نفروشم

آفلاین amin-asa

  • Full Member
  • *
  • ارسال: 161
  • جنسیت : پسر
پاسخ : من یک مشکل با cin.getline در ++C دارم
« پاسخ #11 : 18 آذر 1392، 08:52 ب‌ظ »
هدف من هم اینه:‌
من میخوام این برنامه در هر بار اجرا چند کاراکتر رو از یوزر بگیره و فقط ۷ کاراکتر اول رو چاپ کنه. ولی با این کدی که من دارم حلقه فقط یکبار اجرا مشه. چه بلای سرش میاد نمیدونم.
حدس منم همین بود این کد که برای شما تغییر دادم تقریبا همینه منتها یک سری جاهاشو باید تغییر بدین، فکر کنم اون if  داخلی باید تغییر کنه چون اون null ، آخر رشته رو به شما میده ولی برای نمایش 7 کاراکتر اول شما میتونین به جای اون یک شرط برای i بزارین که کوچکتر از 7 باشه.
لازم هم نبود حتما از پوینتر استفاده کنین، جاهایی که مشابه این کد هست:*(line+i)رو میتونین با عضوهای آرایه عوض کنین:line[i]

ممنون. منم همین کاری که گفتی رو انجام می دم ببینم به نتیجه میرسم یا نه.

راستی این حرفی که من زدم درست بود یا نه:
http://www.cplusplus.com/reference/istream/istream/getline/

The delimiting character is the newline character ('\n') for the first form, and delim for the second: when found in the input sequence, it is extracted from the input sequence, but discarded and not written to s.

یعنی چون \n رو توی ۸ کاراکتر اول پیدا نمیکنه برنامه درست کار نمیکنه؟
* زندگی خالی نیست *
* مهربانی هست، سیب هست، ایمان هست *
* آری تا شقایق هست، زندگی باید کرد *

آفلاین POo

  • Full Member
  • *
  • ارسال: 180
  • جنسیت : پسر
  • 12.04, debian testing
پاسخ : من یک مشکل با cin.getline در ++C دارم
« پاسخ #12 : 18 آذر 1392، 10:40 ب‌ظ »
ممنون. منم همین کاری که گفتی رو انجام می دم ببینم به نتیجه میرسم یا نه.

راستی این حرفی که من زدم درست بود یا نه:
http://www.cplusplus.com/reference/istream/istream/getline/

The delimiting character is the newline character ('\n') for the first form, and delim for the second: when found in the input sequence, it is extracted from the input sequence, but discarded and not written to s.

یعنی چون \n رو توی ۸ کاراکتر اول پیدا نمیکنه برنامه درست کار نمیکنه؟
خواهش میکنم، بله همینطورِ که شما تفسیر کردین.
پدرم روضه رضوان به دو گندم بفروخت     ناخلف باشم اگر من به جوی نفروشم