PDA

View Full Version : سوال: مشکل با getline() در gcc



code_baz
شنبه 31 اردیبهشت 1390, 13:21 عصر
من تو codeblocks این کد رو نوشتم ولی خطاهایی که بعدا مینویسم رو بهم میده:
#include<iostream.h>
#include<conio.h>
using namespace std;
main()
{
char *line[100];
//char *line=new line[100];
cin.getline(line,100,"\t");//Errors related to here
for (int i=0;line[i]!="\t";i++)
cout<<line[i];
cout<<"\n";
errors:
invalid conversion from `const char*' to `char

initializing argument 3 of `std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::getline(_CharT*, std::streamsize, _CharT) [with _CharT = char, _Traits = std::char_traits<char>]

code_baz
شنبه 31 اردیبهشت 1390, 13:28 عصر
تو تعریف line هم از const char استفاده کردم ولی یه error دیگه داد مشکل کجاست؟

code_baz
دوشنبه 02 خرداد 1390, 12:30 عصر
نظری ندارید!!

shahmohammadi
دوشنبه 02 خرداد 1390, 13:06 عصر
سلام.
تابعي كه ارور داره به اين صورت تعريف شده:
istream& getline(char*, int, char = '\n');
در حالي كه شما به پارامتر اولش يه char** دادين و به پارامتر سومش يه عبارت از نوع char* دادين.
اگه به جاي سومي عبارتي مثل '\t' رو بگزارين يه ارورش حل مي شه. و اينكه به پارامتر اول چي بدين بايد منظورتون رو از برنامه بفهمم بعد راهنمايي كنم.
(كد هايي كه داخل متون فارسي نوشتم يكم به هم ريختن ولي منظورمو حتما مي فهميد)

code_baz
دوشنبه 02 خرداد 1390, 22:03 عصر
من متوجه شدم که باید در کاراکتر سوم از اساره گر استفاده کنم , ولی چرا؟ چون توی مثال های getline() مستقیما از کاراکتر استفاده شده.
کسی میتونه منو روشن کنه
کد صحیح:

char *t=" ";;
cin.get(line,100,*t);

غلط:
cin.getline(line,100,"\t")

code_baz
دوشنبه 02 خرداد 1390, 22:05 عصر
اگه کدها به هم ریتن میتونین توی notepad بخونینشون

shahmohammadi
دوشنبه 02 خرداد 1390, 23:58 عصر
من متوجه شدم که باید در کاراکتر سوم از اساره گر استفاده کنم , ولی چرا؟ چون توی مثال های getline() مستقیما از کاراکتر استفاده شده.

اشاره گر يه چيزه كاراكتر يه چيزه ديگه است. اين رشته هست كه با اشاره گر مي شه تعريفش كرد نه كاراكتر. همون طور كه تو پست قبلي اشاره كردم عبارتي كه در داخل "" تعريف شه يه رشته به حساب مي آد يعني از نوع char * در حالي كه كاراكتر رو در اين ' ' نماد نشون مي دن.

code_baz
سه شنبه 03 خرداد 1390, 15:52 عصر
تا اینجا فهمیدم
توی آرگومان سوم یک کاراکتر قابل قبوله ولی من از"هر چی" که معرف رشته هست و رشته هم بحث مربوط به خودش رو داره استفاده میکردم

ولی میشه از یک ((اشاره گر به رشته)) استفاده کرد و توی رشته هم هرچی باشه فرقی نداره یعنی char**
باز اینجا برام سوال البته با تابع مشکلی ندارم فقط میخوام عمیق تر بفهمم
کد:

char *t="bb";

cin.get(line,100,*t);

shahmohammadi
سه شنبه 03 خرداد 1390, 19:47 عصر
در سطر دوم كدتون، عملگر * محتويات اولين خونه ي آرايه ي t رو نشون مي ده كه چون تك تك عناصر آرايه كاراكترن پس اون خونه يه كاراكتر به حساب مي ياد.

در ضمن وقتي لاين به صورت يه آرايه دوبعدي از كاراكتر ها تعريف شه نمي شه تو جايي كه يه رشته (آرايه يك بعدي از كاراكتر ها) لازم هست اونو نوشت.

roteil
جمعه 06 خرداد 1390, 12:38 عصر
سلام
#include <iostream>
#include <conio.h>
#include <assert.h>
using namespace std;
void main()
{
char *line;
line=new char[100];
assert(line);
cin.getline(line,99); //Errors related to here
for (int i=0;line[i]!='t';i++)
cout<<line[i];
cout<<"\n";
delete []line;
getch();
}

این طور بنویسید جواب میده درضمن چند تا اشتباه دارید که تعدادیش را گفتند .
یکیش اینکه شما با دستور cin.getline(line,100,"\t");
باید از '' استفاده کنید که با حلقه ی for که نوشتید این رو اصلا نباید بنویسید چون تا کارکتر
تی می گیره و تی جز رشته نیست و حلقتون برا خودش چرت چاپ می کنه تا بیاد بیرون