PDA

View Full Version : سوال: C++‎‎ نوشتن با کامپایلر هایه جدید ( eclips ; codeblocks ... )



alieblice
چهارشنبه 14 دی 1390, 15:02 عصر
سلام دوستان
من میخام با کامپایلر هایه جدید C++‎‎ بنویسم چون dosbox که باهاش turboC++‎‎ رو رویه سیستم 64 بیت اجرا میکنم خیلی اذیت میکنه . سیستم مجازی هم یکم سنگینه برایه سیستمم .

اما چند تا مشکل دارم :

به جایه چیزایی مثل getch ; clrscr کلا چیزایی که مربوط به conio.h میشه باید چی بزنم ؟ (گویا تو کامپایلر هایه جدید کار نمیکنه)
برایه تبدیل برنامه هایه turboC++‎‎ به کامپایلر هایه جدید کار خاصی باید انجام بدم ؟
کدوم کامپایلر رو پیشنهاد میکنین (نسخه لینوکس هم داشته باشه ) ؟
الان code block با eclips رو دارم


مثلا این رو چه جوری تو یک کامپایلر با استاندارد جدید بنویسم :
کارش اینه که یک نوشته که شبیه ماره به صورت چشمک زن جلو میره .






#include<iostream.h>
#include<conio.h>
#include<dos.h>
void main()
{
int i=1,i2=1;
while(! kbhit())
{
clrscr();
if(i>=10)
{
i2++;
i=1;
sound(600);
delay(400);
}
i++;
gotoxy(i,i2);
sound(100);
delay(200);
sound(25);
delay(80);
sound(1800);
delay(200);
nosound();
textcolor(12);
cprintf("***@:-");
delay(100);

}// end of while
}




پیشاپیش ممنون

majid1605
چهارشنبه 14 دی 1390, 15:27 عصر
توی کامپایلرهای جدید به جای clscr از

system("cls");
استفاده کنید که توی هدر فایل stdlib.h قرار داره برای gotoxy هم توی نت سرچ کنید تابع های زیادی پیدا می کنید.

alieblice
چهارشنبه 14 دی 1390, 20:45 عصر
سلام ممنون بابت پاسخ
وقتی ران میکم اررور نمیده ولی تو خروجی این رو چاپ می کنه :

sh: cls: not found

یعنی کار clrscr() رو اطلا انجام نمیده و صفحه رو پاک نمیکنه.


---------------------------------------------------------------
برایه gotoxy() هم سیرچ کردم ولی همه جا کتاب خانه windows.h رو معرفی کردن که بعد gotoxy رو به صورت یک تابع تعریف مکنیم مشکل این جاست که windows.h رو نمیشناسه و خطا پیدا نکردن فایل رو میده

من با eclips که رویه ubutnu نصب شده کار می کنم

حامد مصافی
چهارشنبه 14 دی 1390, 21:34 عصر
system("clear");

alieblice
چهارشنبه 14 دی 1390, 21:56 عصر
ممنون
فرقی نکرد برنامه اجرا می شه تو خروجی فقط اررورش عوض شد
این اررور رو میده
TERM environment variable not set.


متن برنامه :


#include<iostream>
#include<stdlib.h>
using namespace std;
void f1(int a[],int n);
int main()
{
system("clear");
int number[10],i;
for(i=0;i<10;i++)
{
cout<<"enter a number: ";
cin>>number[i];
}// end of 1th for
f1(number,10);
for(i=0;i<10;i++)
{
cout<<number[i]<<" ";
}
system("clear");
for(i=0;i<10;i++)
{
cout<<number[i]<<" ";
}
return 0;
}// end of main

void f1(int a[],int n)
{
int temp;
for(int i=0;i<n/2;i++)
{
temp=a[i];
a[i]=a[n-i-1];
a[n-i-1]=temp;
}// end of for
}// end of f1

حامد مصافی
پنج شنبه 15 دی 1390, 18:50 عصر
پس حدسم در مورد اینکه از لینوکس استفاده می‌کنید درسته. این دستور رو در کنسول صادر کنید

export TERM=xterm

alieblice
پنج شنبه 15 دی 1390, 23:05 عصر
ممنون برایه پاسخ

من از لینوکس ubuntu 11.10 و eclips که از softwarescenter نصب کردم استفاده میکنم
اون دستور رو تو ترمینال لینوکس زدم , تو فایل .bashrc هم گذاشتم ولی همچنان همون اررور قبلی وجود داره و صفحه پاک نمیشود
برایه پاک کردن صفحه از روش هایه مثلا کلی فاصله cout کنم میشه استفاده کرد ولی باز مکان نما به اول صفحه نمیاد .
برایه gotoxy چه کارکنم ؟
امکانش نیست که کتاب خونه ی conio.h رو من از turboc++ به eclips اضافه کنم ؟

حامد مصافی
جمعه 16 دی 1390, 09:54 صبح
به جرات می‌گم امکان نداره این کار‌ها رو انجام بدید و مشکل همچنان باقی باشه.
اولا)‌ فرمان export متغیر رو فقط برای پروسه جاری ست می‌کنه
دوما) بعد از ثبت در فایل bashrc در راه‌اندازی مجدد سیستم تغییرات اعمال خواهد شد.

هر پروسه در لینوکس یک کپی از متغیر‌های والد را دریافت می‌کند که می‌تواند آزادانه آنها را تغییر دهد اما اجازه تغییر در متغیرهای والد را ندارد. وقتی در پست قبل عرض کردم دستوری را صادر کنید منظورم این بود که برنامه باید در همان پروسه ترمینال باشد.
و اما راه حل ها:

۱- یک ترمینال باز کرده و دستور پست پیش را در آن صادر کنید. سپس در همان ترمینال به محل پروژه رفته و فایل اجرایی را اجرا کنید.
۲- اگر در فایل bashrc دستور را نوشته باشید احتمالا تا الان کامپیوتر را ری‌استارت کرده‌اید و مشکل حل شده است.

alieblice
جمعه 16 دی 1390, 12:07 عصر
ممنون بابت پاسخ
اگر شما میگین که نمیشه پس منم دنبالش تمیرم دیگه

فایل اجرایی برنامه رو ندارم هر کارم کردم نشد فایل اجرایی رو درست کنم شاید من اشتباه میزنم


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

من برنامه رو تو ترمنالی که دستور export TERM=exterm زده بودم با دستور eclipse& اجرا کردم اررور TERM environment variable not set. نیامد ولی بازم system("clear"); کارشو انجام نمیده .

حامد مصافی
جمعه 16 دی 1390, 13:05 عصر
exterm نه، xterm

alieblice
جمعه 16 دی 1390, 14:14 عصر
ببخشید اشتباه تایپی من بود تو ترمینال درستشو (xterm ) زده بودم

rayanafshan
سه شنبه 04 بهمن 1390, 02:57 صبح
می دونم شاید دیر باشه ولی شما وقتی داری از using nmespace std استفاده می کنی دیگه نباید h. رو بزاری پس تنها کاری که باید برای اجرا بکنی اینه که اون h. بعد از stdlib رو بردار.

موفق باشی