PDA

View Full Version : توضیح درباره eof() , fail()



fshb_ 1370
چهارشنبه 27 مرداد 1389, 12:14 عصر
سلام
ميشه درباره eof() و fail() توضیح بدید. تفاوت این دو تا چیه؟
پیشاپیش ممنون:چشمک:

tdkhakpur
چهارشنبه 27 مرداد 1389, 13:04 عصر
از fail استفاده ای نکردم ولی به نظرم منظورتان ferror باشه در هر صورت این تابع برای بررسی خطایی هست که باعث شده شما نتوانید عملیات خواندن و یا نوشتن داخل فایل را انجام بدید.
در مورد eof . این تابع زمانی که شما داده ها را از فایل میخوانید مورد استفاده قرار میگیرد به فرض شما بخواهید یک فایل را باز نموذه و scan کنید برای اینکه بررسی کنید آیا به انتهای فایل رسیده اید از eof استفاده میشود.

fshb_ 1370
چهارشنبه 27 مرداد 1389, 14:36 عصر
اين دو تابع رو من توي اين مثال دیدم البته تو كتاب هم استفاده اين دو تا رو توضيح داده ولی من چیزی متوجه نشدم.
کد برنامه:


#include <iostream>
using namespace std;
int main()
{
char ch;
int count = 0;
cin.get(ch); // attempt to read a char
while (cin.fail() == false) // test for EOF
{
cout << ch; // echo character
count++;
cin.get(ch); // attempt to read another char
}
cout << "\n" << count << " characters read\n";
return 0;
}


این مثال، گرفتن کاراکترها رو انقدر ادامه میده تا کاربر ctrl+z رو بزنه، اون موقع یدگه کاراکتری گرفته نمیشه.
حالا تو شرط while هم میشه fail رو نوشت و هم به جای اون میشه از eof استفاده کرد، نتیجه یکسان است.
حالا کاربرد این دو تابع فقط برای تعیین کردن اتمام ورودی(و یا تعیین اتمام file، که من زیاد در مورد file ها نخوندم) هست؟ این دو تابع فرقی هم دارند؟:متفکر:

tdkhakpur
چهارشنبه 27 مرداد 1389, 16:36 عصر
داخل کدهای که ارسال کردید eof دیده نمیشود ولی اصولا شما کار اینگونه توابع را از روی اسم آنها هم میتوانید تشخیش دهید fail برای زمانی هست که در داخل پردازش شما ایرادی رخ داده باشد و مقدار برگشتی true میشه ولی eof یک نشانه هست که مشخص میکند آیا شما به انتهای کار یا پردازشی که انجام میدهید رسیده اید یا نه.

khafan_bat
چهارشنبه 27 مرداد 1389, 17:05 عصر
این تابع عضو IOS هستش . به مثال زیر خوب توجه کن و بعد ادامه ی مطلب رو بخون .



#include <iostream>
using namespace std;

int main()
{
int number;
do{
cin >> number;
if(cin.fail())
cout << "Not a number " << endl;
}while(!cin.fail());
cout << "number is " << number << endl;
system("pause");
}

تابع fail تشخیص میده که مقداری رو که وارد کردی و داری میریزی تو یک متغیر با نوع متغیری که تعریف کردی fit هست یا خیر. این تابع یا درستی بر میگردونه یا نادرستی.

اگه نادرستی برگردونه یعنی هیچ مشکلی پیش نیومده در غیر این صورت ممکنه معانی زیر رو بده :

1 ) جریان ورودی اطلاعات با مشکل روبه رو شده که میتونی با تابع cin.clear() میزونش کنی

2 ) در مثالی که خودت گذاشتی یعنی اینکه کاربر Ctr+z رو فشرده

مثالی رو که من گذاشتم اجراش کن : همینطور که میبینی number از نوع صحیح هست. اون رو از طریق جریان cin دریافت میکنیم. حالا اگه کاربر به جای وارد کردن یک عدد صحیح یک سری کاراکتر وارد کنه تابع fail متوجه میشه و سپس یه اررور میده یا اینکه ctr+z بزنی . باز هم همینطور

MaHyaR.DrAcOulA
پنج شنبه 28 مرداد 1389, 11:41 صبح
حالا این تابع fail() به چه دردی میخوره؟کجا کاربرد داره؟

fshb_ 1370
جمعه 29 مرداد 1389, 09:37 صبح
این تابع عضو IOS هستش . به مثال زیر خوب توجه کن و بعد ادامه ی مطلب رو بخون .



#include <iostream>




using namespace std;



int main()

{
int number;
do{
cin >> number;
if(cin.fail())
cout << "Not a number " << endl;
}while(!cin.fail());
cout << "number is " << number << endl;
system("pause");
}







تابع fail تشخیص میده که مقداری رو که وارد کردی و داری میریزی تو یک متغیر با نوع متغیری که تعریف کردی fit هست یا خیر. این تابع یا درستی بر میگردونه یا نادرستی.










اگه نادرستی برگردونه یعنی هیچ مشکلی پیش نیومده در غیر این صورت ممکنه معانی زیر رو بده :






1 ) جریان ورودی اطلاعات با مشکل روبه رو شده که میتونی با تابع cin.clear() میزونش کنی






2 ) در مثالی که خودت گذاشتی یعنی اینکه کاربر Ctr+z رو فشرده






مثالی رو که من گذاشتم اجراش کن : همینطور که میبینی number از نوع صحیح هست. اون رو از طریق جریان cin دریافت میکنیم. حالا اگه کاربر به جای وارد کردن یک عدد صحیح یک سری کاراکتر وارد کنه تابع fail متوجه میشه و سپس یه اررور میده یا اینکه ctr+z بزنی . باز هم همینطور





چرا تو برنامه من اگه به جای نوع char عدد بذارم هیچ ارروری ایجاد نمیشه؟

drstrike
شنبه 30 مرداد 1389, 05:53 صبح
چرا تو برنامه من اگه به جای نوع char عدد بذارم هیچ ارروری ایجاد نمیشه؟

نباید هم اررور بده! عدد رو به عنوان یک کاراکتر میشناسه؛ یعنی عدد 5 رو کاراکتر '5' در نظر می گیره.