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

کمک و پشتیبانی => برنامه‌سازی => نویسنده: amin-asa در 18 آذر 1392، 12:32 ق‌ظ

عنوان: من یک مشکل با cin.getline در ++C دارم {حل شد}
ارسال شده توسط: amin-asa در 18 آذر 1392، 12:32 ق‌ظ
سلام دوستان

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

#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

عنوان: پاسخ : مشکل با cin.getline
ارسال شده توسط: doomhammer65ir در 18 آذر 1392، 12:50 ق‌ظ
cin.getline(line, 8);cin.getline(line, 81);
عنوان: پاسخ : مشکل با cin.getline
ارسال شده توسط: xubuntu4iran در 18 آذر 1392، 12:53 ق‌ظ
تو عنوانت بنویس c++ :)
عنوان: پاسخ : مشکل با cin.getline
ارسال شده توسط: amin-asa در 18 آذر 1392، 01:10 ق‌ظ
cin.getline(line, 8);cin.getline(line, 81);

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

چرا وقتی ۸ باشه درست کار نمیکنه؟
عنوان: من یک مشکل با cin.getline در ++C دارم
ارسال شده توسط: xubuntu4iran در 18 آذر 1392، 01:15 ق‌ظ
بهتر بود عنوان رو فارسی انتخاب می‌کردی :D
عنوان: پاسخ : من یک مشکل با cin.getline در ++C دارم
ارسال شده توسط: amin-asa در 18 آذر 1392، 01:31 ق‌ظ
بهتر بود عنوان رو فارسی انتخاب می‌کردی :D

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

حالا جواب سوال چیه؟
عنوان: پاسخ : من یک مشکل با cin.getline در ++C دارم
ارسال شده توسط: doomhammer65ir در 18 آذر 1392، 02:05 ق‌ظ
http://www.cplusplus.com/reference/istream/istream/getline/ (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.
عنوان: پاسخ : من یک مشکل با cin.getline در ++C دارم
ارسال شده توسط: POo در 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 رو تغییر دادم.
عنوان: پاسخ : من یک مشکل با cin.getline در ++C دارم
ارسال شده توسط: amin-asa در 18 آذر 1392، 02:17 ق‌ظ
آقا من اصلا نفهمیدم شما با این کد میخوای چیکار کنی

هدف من هم اینه:‌
من میخوام این برنامه در هر بار اجرا چند کاراکتر رو از یوزر بگیره و فقط ۷ کاراکتر اول رو چاپ کنه. ولی با این کدی که من دارم حلقه فقط یکبار اجرا مشه. چه بلای سرش میاد نمیدونم.
عنوان: پاسخ : من یک مشکل با cin.getline در ++C دارم
ارسال شده توسط: amin-asa در 18 آذر 1392، 02:20 ق‌ظ
http://www.cplusplus.com/reference/istream/istream/getline/ (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 رو توی ۸ کاراکتر اول پیدا نمیکنه برنامه درست کار نمیکنه؟
عنوان: پاسخ : من یک مشکل با cin.getline در ++C دارم
ارسال شده توسط: POo در 18 آذر 1392، 02:33 ق‌ظ
هدف من هم اینه:‌
من میخوام این برنامه در هر بار اجرا چند کاراکتر رو از یوزر بگیره و فقط ۷ کاراکتر اول رو چاپ کنه. ولی با این کدی که من دارم حلقه فقط یکبار اجرا مشه. چه بلای سرش میاد نمیدونم.
حدس منم همین بود این کد که برای شما تغییر دادم تقریبا همینه منتها یک سری جاهاشو باید تغییر بدین، فکر کنم اون if  داخلی باید تغییر کنه چون اون null ، آخر رشته رو به شما میده ولی برای نمایش 7 کاراکتر اول شما میتونین به جای اون یک شرط برای i بزارین که کوچکتر از 7 باشه.
لازم هم نبود حتما از پوینتر استفاده کنین، جاهایی که مشابه این کد هست:*(line+i)رو میتونین با عضوهای آرایه عوض کنین:line[i]
عنوان: پاسخ : من یک مشکل با cin.getline در ++C دارم
ارسال شده توسط: amin-asa در 18 آذر 1392، 08:52 ب‌ظ
هدف من هم اینه:‌
من میخوام این برنامه در هر بار اجرا چند کاراکتر رو از یوزر بگیره و فقط ۷ کاراکتر اول رو چاپ کنه. ولی با این کدی که من دارم حلقه فقط یکبار اجرا مشه. چه بلای سرش میاد نمیدونم.
حدس منم همین بود این کد که برای شما تغییر دادم تقریبا همینه منتها یک سری جاهاشو باید تغییر بدین، فکر کنم اون if  داخلی باید تغییر کنه چون اون null ، آخر رشته رو به شما میده ولی برای نمایش 7 کاراکتر اول شما میتونین به جای اون یک شرط برای i بزارین که کوچکتر از 7 باشه.
لازم هم نبود حتما از پوینتر استفاده کنین، جاهایی که مشابه این کد هست:*(line+i)رو میتونین با عضوهای آرایه عوض کنین:line[i]

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

راستی این حرفی که من زدم درست بود یا نه:
http://www.cplusplus.com/reference/istream/istream/getline/ (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 رو توی ۸ کاراکتر اول پیدا نمیکنه برنامه درست کار نمیکنه؟
عنوان: پاسخ : من یک مشکل با cin.getline در ++C دارم
ارسال شده توسط: POo در 18 آذر 1392، 10:40 ب‌ظ
ممنون. منم همین کاری که گفتی رو انجام می دم ببینم به نتیجه میرسم یا نه.

راستی این حرفی که من زدم درست بود یا نه:
http://www.cplusplus.com/reference/istream/istream/getline/ (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 رو توی ۸ کاراکتر اول پیدا نمیکنه برنامه درست کار نمیکنه؟
خواهش میکنم، بله همینطورِ که شما تفسیر کردین.