انجمنهای فارسی اوبونتو
کمک و پشتیبانی => برنامهسازی => نویسنده: رجبی در 09 فروردین 1388، 07:51 بظ
-
سلام من کد زیر را نوشتم اما فقط scanf اول را میخواند اما چند بار هم که compile , build یا با gedit ذخیره میکنم درست کار میکنه مشکل از چیه ؟
من از geary , gcc, استفاده میکنم البته g++, bulid-esstrial هم دارم
#include <stdio.h>
int main ()
{
//My variable
char name;
int a,b,c,sum,z;
printf("Please enter your name :\n");
scanf("%c",&name);
printf("Please enter 3 number :\n");
scanf("%d %d %d",&a,&b,&c);
sum=a+b+c;
z=a*b*c;
printf("Hey %c \n result:\n sum= %d zarb =%d",name,sum,z);
scanf("%d",&a);
return 0;
}
البته این قسمت را هم به این شکل هم نوشتم
scanf("%d%d%d",&a,&b,&c);
؟؟؟؟؟؟ ::)
یا علی
-
سلام
من برنامه رو با gcc کامپایل کردم و مشکلی نداشت !
gcc sample.c -o sample
-
با سلام
من هم اشکالی در برنامتون نمیبینم و به خوبی کامپایل و اجرا میشود ;)
یک مقداری پرسشتون نامفهومه!! ::)
اما چند بار هم که compile , build یا با gedit ذخیره میکنم درست کار میکنه مشکل از چیه ؟
برای اینکه بتوان بهتر در مورد روند برنامه قضاوت کرد اندکی در کد شما دست بردم و همراه با خروجیش اینجا قرار میدم تا شاید کمک کنه. ::) :)
#include <stdio.h>
int main ()
{
//My variable
char name;
int a,b,c,sum,z;
printf("Please enter your name :\n");
scanf("%c",&name);
printf("Please enter 3 number :\n");
scanf("%d %d %d",&a,&b,&c);
sum=a+b+c;
z=a*b*c;
printf("Hey %c \n result:\n sum= %d zarb =%d\n",name,sum,z);
printf("Please enter first number again :\n");
scanf("%d",&a);
printf("new value of a is %d",a);
return 0;
}
خروجی همراه با مقادیر داده شده:
Please enter your name :
w
Please enter 3 number :
1 2 3
Hey w
result:
sum= 6 zarb =6
Please enter first number again :
5
new value of a is 5
موفق باشید. \\:D/
-
سلام ممنون متوجه مشکل شدم من کاراکتر پاسکال را با سی اشتباه گرفته بودم بجای یک حرف چند حرف میزدم مشکل از این بود .
خدایی debug کردن برنامه با c خیلی سخت تر
یاعلی
-
debug کردن برنامه با c سخت نیست!
برای debug کردن میتونید از gdb استفاده کنید.
برای اینکار موقع کامپایل از سوییچ -g تو کاموایل استفاده کنید.
g++ sample.cpp -g -o sample
موقع اجرا :
gdb ./sample
برای کار با gdb مطلب زیاد هست، یه search ساده میخواد.
-
سلام
من یک برنامه نوشتم مشکلی هم نداره اما ما چون در دانشگاه از turbo c++ یا borland turbo c++ استفاده میکنم
از کتابخانه conio.h و تابع getch() برای بسته نشدن برنامه قبل دیدن نتایج استفاده میشه ولی هم g++ , gcc هر دو میگن این ها وجود نداره ؟؟؟ راه نیست یا کامپایلری که شبیه اونها باشه ؟
تابع clrscr() هم نداره !!!
من در لینوکس مشکلی ندارم چون صفحه بسته نمیشه اما در ویندوز این برنامه را استادمون کامپایل کنه مشکل داره چه کنم ؟
یک سوال دیگه برنامه geany سورس را میده کامپایلر و execute را که میزنی اجرا میشه اما اگر من برای دوستم که فرض که لینوکس داره این را بصورت یک برنامه اجرایی بخوام ارسال کنم چه باید انجامم بدم دوتا فایل بعد از build یکی بدون پسوند و دیگری با پسوند .o هست هر کدوم هم میزنی روشون اجرا نمیشن منظور من همان فایل exe که در ویندوز برنامه turbo c میسازه و به هرکی بدی اجرا میشه معادل اون در اوبونتو چیه و باید چه کرد ؟
یا علی.
-
برای اینکه بتونید خروجی برنامه رو ببینید در c++ آخر کدتون بذارید cin>>ch
و char ch رو هم تعریف کنید، این جوری برای خروج از برنامه باید یک کلید را فشار بدین.
تو c هم میتونید از scanf استفاده کنید.
clrscr هم داره !
-
با سلام
یه جستجو در همین forum راه حلهایی رو نشون می داد:
http://forum.ubuntu.ir/index.php/topic,2921.0.html (http://forum.ubuntu.ir/index.php/topic,2921.0.html)
http://forum.ubuntu.ir/index.php/topic,7843.0.html (http://forum.ubuntu.ir/index.php/topic,7843.0.html)
http://forum.ubuntu.ir/index.php/topic,6265.0.html (http://forum.ubuntu.ir/index.php/topic,6265.0.html)
و البته اینترنت ;)
اگر مشکل شما تنها بسته شدن پنجره خروجی است بهتره که بجای تابع getch() از getchar() که از کتابخانههای استاندارد C/C++ است استفاده کنید.
وقتی سورس برنامه رو با geany کامپایل میکنید (درصورتی که دستور کامپایل پیشفرض اون رو تغییر نداده باشید) فایلی با اسم سورس اصلی و پسوند .o ایجاد میشود. دستور Build سورس و کامپایل کرده و یک فایل اجرایی همانم با نام برنامه ولی بدون پسوند میسازد. دستور execute تنها فایل اجرای قبل را در ترمینال اجرا میکند.
برای اجرای فایل اجرایی درون ترمینال یه کاراکتر./
در ابتدای نام فایل اجرایی گذاشته و enter کنید. \\:D/
به عنوان مثال برای فایل اجرایی test در ترمینال بنویسید:
./test
موفق باشید. \\:D/
-
سلام ممنون در ترمینال را میدانم اما برای محیط گرافیکی چه کاری باید کرد که اجرا شه ؟
این system(clear) , system (reset)
در ویندوز کار میکنه و همین طور getchar() ?
-
برای خواندن یک کلید از صفحه کلید در لینوکس باید از kbhit استفاده کنید.
-
یادتون باشه دوست عزیز C++ ویندوز استاندارد نیست ولی مال لینوکس هست یعنی header های مثل conio یا windows.h و امثال آنها مال ویندوزه و در لینوکس کارایی نداره به همین دلیل
getchar()
کار نمیده ولی دستور system(char * command)
که مال stdio.h هست در اینجا هم کار میکنه .
-
سلام من کد زیر را نوشتم اما فقط scanf اول را میخواند اما چند بار هم که compile , build یا با gedit ذخیره میکنم درست کار میکنه مشکل از چیه ؟
من از geary , gcc, استفاده میکنم البته g++, bulid-esstrial هم دارم
#include <stdio.h>
int main ()
{
//My variable
char name;
int a,b,c,sum,z;
printf("Please enter your name :\n");
scanf("%c",&name);
printf("Please enter 3 number :\n");
scanf("%d %d %d",&a,&b,&c);
sum=a+b+c;
z=a*b*c;
printf("Hey %c \n result:\n sum= %d zarb =%d",name,sum,z);
scanf("%d",&a);
return 0;
}
البته این قسمت را هم به این شکل هم نوشتم
scanf("%d%d%d",&a,&b,&c);
؟؟؟؟؟؟ ::)
یا علی
این پست قدیمیه ولی برای استفاده کسانی که احتمالا به این پست بر بخورن می نویسم، برنامه ای که اشاره کردین یه اشتباه مخفی داره! شما از کاربر می خواهید که یک اسم وارد کنه که در واقع یک رشته (string) است، ولی با scanf فقط یک کاراکتر اول اون رو می خونید! در نتیجه چندین کاراکتر تو بافر ورودی سیستم باقی می مونه که در scanf های بعدی بدون اینکه شما چیزی وارد کنید اونها رو می خونه! بهترین راه اینه برای گرفتن یک رشته کامل از gets() استفاده کنید.