ايران ويج

نسخه‌ی کامل: سوال درمورد API , پیوند رشته ها , کار با فایل
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
با سلام به دوستان عزیز

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

1. طرز استفاده از یک تابع API ساده مثل Sleep در VC++6 چگونه است
2. چگونه می توان رشته ها را بهم پیوند زد ( مثل & در VB )
3.طریقه نوشتن و خواندن کلمه در فایل با استفاده از هدرهای istream.h ,
ostream.h چگونه است ( اگر با fstream می شه اون رو هم لطفآ توضیح بدید )

با تشکر از دوستان
آقا سلام

طرز استفاده از یک تابع API ساده مثل Sleep در VC++6 چگونه است :

کد:
#include <windows.h>

void main()
{

    Sleep(500);
}
--------------------------------------------------------------------
2-چگونه می توان رشته ها را بهم پیوند زد ( مثل & در VB )

در زبان سی چون رشته ها مختوم به null یا به عبارتی null terminated هستند نمیشه مثل وی بی با عملگر های + یا & اونها رو بهم چسبونده . در واقع توی زبان سی تابعی با نام strcat در هدر فایل string.h تعریف شده که می تونه اینکار رو برات انجام بده !
اما اگر بازهم دلت میخواد که با عملگر هایی مثل + یا & ، دو تا رشته رو بهم بچسبونی باید از زبان ++C و از قابلیتی با نام operator overloading ( بازنویسی عملگرها ) در این زبان استفاده کنی . در واقع شما میای یه کلاس از نوع string طراحی می کنی و توی اون عملگر های + یا & رو طوری overload می کنی که برات عمل concatenation یا همون چسبوندن رشته ها رو انجام بده . این بحث در زبان ++C بسیار مهم و مفصله ! اگر نیاز داشتی بگو برات مثالش رو بزنم ولی من توصیه می کنم زبان ++C رو از پایه بشین و یاد بگیر چون مبحث operator overloading یکی از واجبات این زبانه !
--------------------------------------------------------------------------------
3-طریقه نوشتن و خواندن کلمه در فایل با استفاده از هدرهای istream.h ,
ostream.h چگونه است

باید بدونیم هدر istream.h کلاس های خواندن و هدر ostream.h کلاس های نوشتن رو شامل میشه ! اما هدر iostream.h هر دوی اینها رو شامل میشه .

اما برای کار با فایل ، کلاس موجود در هدر های fstream.h و  ofstream.h و ifstream که از کلاس های بالا مشتق میشن بکار گرفته میشن .
fstream.h  هر دو قابلیت رو داره اما اون دوتای دیگه ، قابلیت های نوشتن و خوندن رو جداگانه کپسوله کردند ! اینم یه برنامه ساده که یه عدد رو توی یه فایل ذخیره می کنه :

کد:
#include <iostream.h>
#include <fstream.h>

void main()
{

    ofstream outf("c:\myfile.txt");
    int num;
    if(!outf)
        cout << "cannot open the file";
    
    cout << "Enter your number :";
    cin >> num;
    
    outf << num << endl;
    outf.close();

}





ممد جان سلام
از اينکه وقتت رو در اختيار من گذاشتي ممنونم

من وقتي کدي که براي تابع sleep بهم دادي رو وارد مي کنم سي ++ اين ارور رو بهم ميده
--------------------Configuration: Test - Win32 Debug--------------------
Compiling...
Test.cpp
E:\Test\Test.cpp(6) : error C2065: 'sleep' : undeclared identifier
Error executing cl.exe.

Test.exe - 1 error(s), 0 warning(s)
و وقتي کد مربوط به کار با فايل رو ميدم سي ++ اين ارور رو ميده
--------------------Configuration: Test - Win32 Debug--------------------
Compiling...
Test.cpp
e:\test\test.cpp(7) : warning C4129: 'm' : unrecognized character escape sequence
e:\test\test.cpp(9) : error C2065: 'out' : undeclared identifier
Error executing cl.exe.

Test.exe - 1 error(s), 1 warning(s)
من اين کدها رو تو مد کنسول وارد مي کنم آيا ربطي داره

در مورد operator overloading هم فقط در هد مفهومش بلدم و اگه لطف کني اين رو هم توضيح
بدي ممنونت مي شم
آقا سلام . شرمنده من این کد ها رو تند تند نوشته بودم برای همین اون مشکلات تایپی توش پیش اومد !
تابع Sleep حرف S اولش بزرگه ( Caps ) . اون sleep رو به Sleep تغییر بدی حله !
توی یکی از خط های برنامه دوم هم من نوشته بودم (if (!out که باید نوشته میشد (if (!outf  تا برنامه دوم هم کامپایل بشه !
همون بالا هر دو رو تصحیح کردم !

درباره operator overloading :

یکی از رکنهای اساسیه زبان ++C همون شی و کلاس هستند . در واقع شما یک کلاس رو تعریف می کنی تا بتونی تعدادی شی رو از جنس همون کلاس بسازی .
همینطور می دونیم عملگر های زبان ++C مثل + یا - یا * یا ..... روی عملوند هایی از نوع متغیر  بخوبی کار می کنند . می تونیم دوتا متغیر مثلا از نوع int رو با هم جمع کنیم یا از هم کم کنیم . مثال

کد:
[align=left]
int x,y,z
x = y + z - x[/align]

در اینحا هر سه متغیرهایی از نوع int هستند و برای کامپایلر کاملا شناخته شده !

ولی اگر عملوند ما شیی از یک کلاس بود چطور ؟؟ در این حالت مثلا عملگر  + برای شی ما (یا به عبارتی همون کامپایلر ++C ) ناشناخته و تعریف نشده است ! زبان ++C به ما این امکان رو میده که نحوه  برخورد کامپایلر هنگامی که یک عملوند به شکل یک شی ظاهر میشه رو مشخص کنیم . مثال :

کد:
[align=left]class num
{
    public : int digit ;
};

num x,y,z;[/align]
    

در کد بالا x , y و z شی هایی از کلاس num هستند و متغیر نیستند ! پس نوشتن عبارت x = y + z - x توسط کامپایلر خطا محسوب خواهد شد چرا که شما هیچ کدوم از عملگرهای + و - رو برای کلاس خودتون تعریف نکردید و کامپایلر نمی تونه بفهمه باید با شی شما چطور برخورد بکنه !

کد زیر برنامه ای هست که دوتا string رو با عملگر + بهم می چسبونه با کمک بازنویسی عملگر ها :

کد:
[align=left]#include <iostream.h>
#include <string.h>

class String
{
  
    public :
           
       char str[20];

  
      
       String  operator+(String ss)
       {
        
        String temp;
        strcpy(temp.str, str);
        strcat(temp.str, ss.str);

        return temp;
       }

       String(char* s="\0")
       {
            strcpy(str,s);
       }


        
      
};      

void main()
{

   String s1 = "Mamad";             
   String s2 = "2003 ";  
  

   String s3;
  
   s3 = s1 + s2;
      
   cout << s3.str ;

  

}[/align]
ممد جان زحمت کشیدی
خیلی ممنون . جوابات خیلی با حال بود
دارم رو operator overloading کار می کنم
ممد جان هر چی به این کد operator overloading نگاه می کنم
چیزی متوجه نمی شم ( مخصوصآ Temp )
اگه یه مقدار توضیح بدی ممنون می شم
Iron_Fist فکر میکنم جواب 2 سوال اولت رو گرفتی و حالا در مورد سوال سوم :

میدونی با فایلها در 2 حالته متنی و binary می شود کار کرد برای حالت متنی به کد زیر تو جه کن:
کد:
#include <fstream>
#include <iostream>

using namespace std;

int main(int argc, char* argv[], char** env)
{
    fstream l_stmOut("My Letter.txt", ios_base::out | ios_base::trunc);
    l_stmOut << "Sallam alykom barobache haye iranvichy chetorid?!" << endl;
    l_stmOut.close();

    fstream l_stmIn("My Letter.txt", ios_base::in);
    cout << l_stmIn.rdbuf() << endl;
    l_stmIn.close();

    return 0;
}

و برای حالت binary به این کد نگاه کن بسیار ساده و جالب است
از روش کار C++ با فایلها خیلی خوشم می آد!
کد:
#include <fstream>
#include <iostream>

using namespace std;

int main(int argc, char* argv[], char** env)
{
    int l_intX = 126;

    fstream l_stmOut("My Letter.txt", ios_base::out | ios_base::trunc | ios_base::binary);
    l_stmOut << l_intX;
    l_stmOut.close();

    fstream l_stmIn("My Letter.txt", ios_base::in | ios_base::binary);
    l_stmIn >> l_intX;
    l_stmIn.close();

    cout << "X = " << l_intX << endl;

    return 0;
}

می دونی که برای خواندن و نوشتن اشیا یا متغییر ها معمولا از روش binary استفاده می شود.

سعید ت Cool
آقا سعید دستت درست . مثال ها خیلی مفید هستند
دستت شما درد نکنه . ممنون
سلام ببخشید تابعی هست که کل دستورات رو متوقف نکنه و فقط وقفه ایجاد کنه؟
مثلا برای ساخت تایمر کنار یه بازی
و یه سوال دیگه من میخوام بازی مار رو بنویسم چطور میتونم کاری کنم که مار حرکت کنه تا زمانی که کاربر کاراکتر وارد کنه؟ یعنی تا زمانی که کاربر کاراکتر وارد نکرده به حرکت ادامه بده
ممنون میشم زودجواب بدید
با تشکرWhistle