mahdavi3d

همفکری کاربران برای رفع اشکالات برنامه نویسی

Recommended Posts

[quote]ممنون.فقط این تابع در اصل کارش چیه و اون f2 چیه و چرا داخل "" قرار گرفته؟؟؟[/quote]
تابعی مشابه printf در c
برای نمایش اعداد یا هر متغیر دیگه با فرمت مشخص
در این عبارت عدد رو float در نظر میگیره و با دو رقم اعشار نمایش میده

مالدینی عزیز
کلا کار برنامه نویسی اگه بتونی بجای درست و حسابی وصل بشی و یا با شرکتهایی کار کنی که با سازمانها مرتبط هستن، حسابی نونت تو روغنه
حتی برنامه نویسی سایت
دوستمون درسته فرمایششون
افرادی هستن که با 50.000 تومن یه سایت میارن بالا البته از برنامه های کدبازی مثل جوملا و غیره استفاده میکنن

به اشتراک گذاشتن این پست


لینک به پست
اشتراک در سایت های دیگر
[quote name='irartesh' timestamp='1373869007' post='321650']
اگه 50 تومن میشناسی به ما معرفی کن.یه سایت=50تومن؟؟؟
[/quote]
والاه من نمیشناسمشون ولی یه بنده خدائی کارهای منو که دیده بود خوشش اومده بود بهم گفت میخواد یه سایت بزنه چه قیمت باهاش حساب میکنم یه قیمتی دادم. بنده خدا داد به این دانشجویان کامپیوتر براش سایت طراحی کردن که فقط سایز صفحه اولس نزدیک 2 مگابایت شده بود، بعد مدتی دوباره اومد پیش خودم گفت چرا اینقدر کنده گفتم آخر طراحی با 50 تومن همینه دیگه.

به اشتراک گذاشتن این پست


لینک به پست
اشتراک در سایت های دیگر
این یه برنامه جهت کنترل ورودی هست به نحوی که 1- ورودی باید عدد باشه 2- یک یا دو باشه با وارد کردن یکی از این دو عدد مقدار کنترلی تعیین شده و عمل مربوطه در خارج از این حلقه انجام میشه که اون رو کاری نداریم اما...
اما با وارد کردن یه کاراکتر حلقه بدون دریافت هیچ رقمی وارد تکرار بی‌نهایت میشه. چیرا!؟

[left][code]#include<stdio.h>
#include<ctype.h>

int main()
{
int control_key;

while(1)
{
printf("Press\n1: continue.\n2: quit.\n");
scanf("%d", &control_key);
printf("\n\n");

if( isdigit( control_key ) && (control_key == 1 || control_key == 2) )
break;

else
printf("Just digits 2 or 1 could be accepted!!!\n\n");
}

}
[/code][/left]

به اشتراک گذاشتن این پست


لینک به پست
اشتراک در سایت های دیگر
[quote name='Electro_officer' timestamp='1373883217' post='321694']
این یه برنامه جهت کنترل ورودی هست به نحوی که 1- ورودی باید عدد باشه 2- یک یا دو باشه با وارد کردن یکی از این دو عدد مقدار کنترلی تعیین شده و عمل مربوطه در خارج از این حلقه انجام میشه که اون رو کاری نداریم اما...
اما با وارد کردن یه کاراکتر حلقه بدون دریافت هیچ رقمی وارد تکرار بی‌نهایت میشه. چیرا!؟

[left][code]#include<stdio.h>
#include<ctype.h>

int main()
{
int control_key;

while(1)
{
printf("Press\n1: continue.\n2: quit.\n");
scanf("%d", &control_key);
printf("\n\n");

if( isdigit( control_key ) && (control_key == 1 || control_key == 2) )
break;

else
printf("Just digits 2 or 1 could be accepted!!!\n\n");
}

}
[/code][/left]
[/quote]
سلام
الکترو جان با وارد کردن هر چیزی غیر از عدد خود دستور scanf است که باعث بروز خطا می شود چون متغیر عددی ذکر شده ، نمی تواند کاراکتر بپذیرد.

پیشنهاد من این است که از اول گزینه ات را به صورت کاراکتر دریافت کن وبعدش
1 - یا در مقایسه با کاراکتر 1 و 2 مقایسه اش بکن که این مشکل پیش نیاید
2 - یا این که بعد از دریافت و اگر کاراکتر عددی بود تبدیل به عددش بکن و در غیر این صورت عدد جدید درخواست بکن. ویرایش شده در توسط oldmagina

به اشتراک گذاشتن این پست


لینک به پست
اشتراک در سایت های دیگر
Electro_officer عزیز
اگه از تابع getch استفاده کنید بهتر نتیجه میگیرید
این کد رو تست نکردم ولی اگه خطا داد با تغییرات جزئی میتونید اجراش کنید:
[CODE]#include<conio.h>
#include<stdio.h>

int main()
{
char ch = '';

while(1)
{
printf("Press\n1: continue.\n2: quit.\n");
ch = getch();
printf("\n\n");

if(ch == 49 || ch == 50)//0: 48
break;
else
printf("Just digits 2 or 1 could be accepted!!!\n\n");
}

}[/CODE]

به اشتراک گذاشتن این پست


لینک به پست
اشتراک در سایت های دیگر
[quote name='oldmagina' timestamp='1373887664' post='321709']
سلام
الکترو جان با وارد کردن هر چیزی غیر از عدد خود دستور scanf است که باعث بروز خطا می شود چون متغیر عددی ذکر شده ، نمی تواند کاراکتر بپذیرد.

پیشنهاد من این است که از اول گزینه ات را به صورت کاراکتر دریافت کن وبعدش
1 - یا در مقایسه با کاراکتر 1 و 2 مقایسه اش بکن که این مشکل پیش نیاید
2 - یا این که بعد از دریافت و اگر کاراکتر عددی بود تبدیل به عددش بکن و در غیر این صورت عدد جدید درخواست بکن.
[/quote]

[quote name='hightech' timestamp='1373888473' post='321714']
Electro_officer عزیز
اگه از تابع getch استفاده کنید بهتر نتیجه میگیرید
این کد رو تست نکردم ولی اگه خطا داد با تغییرات جزئی میتونید اجراش کنید:
[CODE]#include<conio.h>
#include<stdio.h>

int main()
{
char ch = '';

while(1)
{
printf("Press\n1: continue.\n2: quit.\n");
ch = getch();
printf("\n\n");

if(ch == 49 || ch == 50)//0: 48
break;
else
printf("Just digits 2 or 1 could be accepted!!!\n\n");
}

}[/CODE]
[/quote]

اصلاح شده اش میشه این :
[left]
[code]
#include<conio.h>
#include<stdio.h>

int main()
{
char ch ;

while(1)
{
printf("Press\n1: continue.\n2: quit.\n");
ch = getch();
printf("\n\n");

if(ch == '1' || ch == '2')
break;
else
printf("Just digits 2 or 1 could be accepted!!!\n\n");
}

}
[/code][/left] ویرایش شده در توسط oldmagina
  • Upvote 1

به اشتراک گذاشتن این پست


لینک به پست
اشتراک در سایت های دیگر
هیچکدومشون درست کار نمیکنه! :mrgreen:
دومی که کلا اجازه نمیده من اینتر بزنم خودش پرش میکنه! icon_cheesygrin

با تغییر برنامه به این شکل مساله حل میشه اما با وارد کردن کاراکتر غیر صحیح حلقه چند بار اجرا و بعد برای دریافت مقدار مناسب متوقف میشه. علت این پرش‌ها چیست!؟

[left][code]#include
#include

int main()
{


while(1)
{
char control_key;
printf("Press\n1: continue.\n2: quit.\n");
scanf("%c", &control_key);
printf("\n\n");

if( (control_key == '1' || control_key == '2' ) )
break;

else
printf("Just digits 2 or 1 could be accepted!!!\n\n");
}

}[/code][/left]

به اشتراک گذاشتن این پست


لینک به پست
اشتراک در سایت های دیگر
[quote name='Electro_officer' timestamp='1373900297' post='321728']
هیچکدومشون درست کار نمیکنه! :mrgreen:
دومی که کلا اجازه نمیده من اینتر بزنم خودش پرش میکنه! icon_cheesygrin
[/quote]
سلام
الکترو جان من اینو تست کردم و کار میکنه
[left]
[code]
#include<conio.h>
#include<stdio.h>

int main()
{
char ch ;

while(1)
{
printf("Press\n1: continue.\n2: quit.\n");
ch = getch();
printf("\n\n");

if(ch == '1' || ch == '2')
break;
else
printf("Just digits 2 or 1 could be accepted!!!\n\n");
}

}
[/code][/left]
تابع getch بعد از دریافت اولین کاراکتر ، به سطر بعد برنامه می رود .
برنامه پیشنهادی دوستمون که من ویرایشش کردم ، تمام کار برنامه مورد نظر شما را انجام می دهد و فقط در نهایت شما باید به پیشنهاد دوم من عمل کنید
[quote name='oldmagina' timestamp='1373887664' post='321709']
2 - یا این که بعد از دریافت اگر کاراکتر عددی بود تبدیل به عددش بکن .
[/quote]
اگر بخشی از منظور مورد نظر شما برآورده نمی شود لطفا ذکر بکن.


[quote name='Electro_officer' timestamp='1373900574' post='321728']
با تغییر برنامه به این شکل مساله حل میشه اما با وارد کردن کاراکتر غیر صحیح حلقه چند بار اجرا و بعد برای دریافت مقدار مناسب متوقف میشه. علت این پرش‌ها چیست!؟


[/quote]
اونی که من اصلاح کردم و گذاشتم که این مشکل رو نداره ، فقط منتظر اینتر ناقابل از طرف کاربر محترم نمیمونه :winking:
ظاهرا این برنامه هر چند تا کاراکتر وارد بکنی همون تعداد به اضافه یک بار حلقه را اجرا می کند.
با مترجم استاندارد بورلند داری برنامه رو ترجمه میکنی یا با ویژوال استودیو ؟
فکر نمی کنم با مترجم بورلند این مشکل رو داشته باشه ؟!

پی نوشت :
میتونی به این شکل لاپوشونیش کنی :mrgreen:
[left]
[code]
#include<conio.h>
#include<stdio.h>
#include <windows.h>

int main()
{


while(1)
{
char control_key;
printf("Press\n1: continue.\n2: quit.\n");
scanf("%c", &control_key);
system("cls");
if( (control_key == '1' || control_key == '2' ) )
break;

else
printf("Just digits 2 or 1 could be accepted!!!\n\n");
}

}
[/code][/left]
پی نوشت بعدی :
فکر می کنم چون control_key را به عنوان char تعریف کرده ای برنامه بعد از گرفتن کاراکتر اول یک بار حلقه را اجرا می کند و بعد از آن از اینتر به عنوان یک کاراکتر دیگر که در بافر باقی مانده است استفاده می کند و به این علت حلقه دو بار می چرخد.
میشه اینم به این شکل لاپوشونی کرد :laughing:
[left]
[code]
#include<conio.h>
#include<stdio.h>

int main()
{

while(1)
{
char control_key;
printf("Press\n1: continue.\n2: quit.\n");
scanf("%c", &control_key);
if( (control_key == '1' || control_key == '2' ) )
break;

else
printf("Just digits 2 or 1 could be accepted!!!\n\n");
scanf("%c", &control_key);
}

}
[/code][/left] ویرایش شده در توسط oldmagina

به اشتراک گذاشتن این پست


لینک به پست
اشتراک در سایت های دیگر
الكتروجان بعضي از كليدها دو تا كاركتر مي فرستند مثل F1,F2و...

به اشتراک گذاشتن این پست


لینک به پست
اشتراک در سایت های دیگر
[quote]
پی نوشت بعدی :
فکر می کنم چون control_key را به عنوان char تعریف کرده ای برنامه بعد از گرفتن کاراکتر اول یک بار حلقه را اجرا می کند و بعد از آن از اینتر به عنوان یک کاراکتر دیگر که در بافر باقی مانده است استفاده می کند و به این علت حلقه دو بار می چرخد.
میشه اینم به این شکل لاپوشونی کرد :laughing:
[/quote]
دقیقا فکر میکنم همچین اتفاقی میفته. ورودی کنترلی رو رشته تعریف کردم مشکل پرش حل میشه ولی دیگه کلا از حلقه خارج نمیشه برنامه! همه‌ی برنامه‌هایی که نوشتیم همین مشکل پرش رو دارند... به جز اون برنامه‌ی حاوی cls که نمیخوام استفاده کنم! ضمنا با وارد کردن مثلا 233 هم برنامه متوقف میشه. کامپایلرم GNU GCC هست وقتی رو بورلند سوییچ میکنم فایل اجرایی رو نمیسازه نمیدونم چرا البته فکر نمیکنم اشکال از کامپایلر باشه یه چیزی این وسط هست که ما بهش توجه نمیکنیم.

به اشتراک گذاشتن این پست


لینک به پست
اشتراک در سایت های دیگر
[quote name='Electro_officer' timestamp='1373962700' post='321770']
[quote]
پی نوشت بعدی :
فکر می کنم چون control_key را به عنوان char تعریف کرده ای برنامه بعد از گرفتن کاراکتر اول یک بار حلقه را اجرا می کند و بعد از آن از اینتر به عنوان یک کاراکتر دیگر که در بافر باقی مانده است استفاده می کند و به این علت حلقه دو بار می چرخد.
میشه اینم به این شکل لاپوشونی کرد :laughing:
[/quote]
دقیقا فکر میکنم همچین اتفاقی میفته. ورودی کنترلی رو رشته تعریف کردم مشکل پرش حل میشه ولی دیگه کلا از حلقه خارج نمیشه برنامه! همه‌ی برنامه‌هایی که نوشتیم همین مشکل پرش رو دارند... به جز اون برنامه‌ی حاوی cls که نمیخوام استفاده کنم! ضمنا با وارد کردن مثلا 233 هم برنامه متوقف میشه. کامپایلرم GNU GCC هست وقتی رو بورلند سوییچ میکنم فایل اجرایی رو نمیسازه نمیدونم چرا البته فکر نمیکنم اشکال از کامپایلر باشه یه چیزی این وسط هست که ما بهش توجه نمیکنیم.
[/quote]
سلام
نمیدونم اون برنامه ای که از getch استفاده میکنه چه ایرادی داره که شما راضی به استفاده از اون نیستی ؟

به اشتراک گذاشتن این پست


لینک به پست
اشتراک در سایت های دیگر
[quote name='oldmagina' timestamp='1373968120' post='321809']
[quote name='Electro_officer' timestamp='1373962700' post='321770']
[quote]
پی نوشت بعدی :
فکر می کنم چون control_key را به عنوان char تعریف کرده ای برنامه بعد از گرفتن کاراکتر اول یک بار حلقه را اجرا می کند و بعد از آن از اینتر به عنوان یک کاراکتر دیگر که در بافر باقی مانده است استفاده می کند و به این علت حلقه دو بار می چرخد.
میشه اینم به این شکل لاپوشونی کرد :laughing:
[/quote]
دقیقا فکر میکنم همچین اتفاقی میفته. ورودی کنترلی رو رشته تعریف کردم مشکل پرش حل میشه ولی دیگه کلا از حلقه خارج نمیشه برنامه! همه‌ی برنامه‌هایی که نوشتیم همین مشکل پرش رو دارند... به جز اون برنامه‌ی حاوی cls که نمیخوام استفاده کنم! ضمنا با وارد کردن مثلا 233 هم برنامه متوقف میشه. کامپایلرم GNU GCC هست وقتی رو بورلند سوییچ میکنم فایل اجرایی رو نمیسازه نمیدونم چرا البته فکر نمیکنم اشکال از کامپایلر باشه یه چیزی این وسط هست که ما بهش توجه نمیکنیم.
[/quote]
سلام
نمیدونم اون برنامه ای که از getch استفاده میکنه چه ایرادی داره که شما راضی به استفاده از اون نیستی ؟
[/quote]
اشکالش اینه که امون نمیده یه اینتر بزنم! :mrgreen:

به اشتراک گذاشتن این پست


لینک به پست
اشتراک در سایت های دیگر
خوب چه نیازی به زدن اینتر هست ؟
اون برنامه که اصلا اینتر لازم نداره و خودش با زدن اولین کاراکتر اونو میبره تو برنامه .!

به اشتراک گذاشتن این پست


لینک به پست
اشتراک در سایت های دیگر
[quote name='oldmagina' timestamp='1373970162' post='321823']
خوب چه نیازی به زدن اینتر هست ؟
اون برنامه که اصلا اینتر لازم نداره و خودش با زدن اولین کاراکتر اونو میبره تو برنامه .!
[/quote]
شاید نظر کاربر بعد از وارد کردن مقدار تغییر کنه و بخواد پاکش کنه این نحوه برنامه نویسی این اختیار رو از کابر سلب میکنه.

به اشتراک گذاشتن این پست


لینک به پست
اشتراک در سایت های دیگر
سلام
این شکلی حل میشه و نظر شما رو هم تامین میکنه :
[code]

#include<conio.h>
#include<stdio.h>
#include <string.h>

int main()
{

while(1)
{
char control_key[10];
printf("Press\n1: continue.\n2: quit.\n");
scanf("%s", &control_key);
if( (strlen(control_key)<2)&& (control_key[0] == '1' || control_key[0] == '2' ))
break;

else
printf("Just digits 2 or 1 could be accepted!!!\n\n");

}

}

[/code] ویرایش شده در توسط oldmagina

به اشتراک گذاشتن این پست


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

ایجاد یک حساب کاربری و یا به سیستم وارد شوید برای ارسال نظر

کاربر محترم برای ارسال نظر نیاز به یک حساب کاربری دارید.

ایجاد یک حساب کاربری

ثبت نام برای یک حساب کاربری جدید در انجمن ها بسیار ساده است!

ثبت نام کاربر جدید

ورود به حساب کاربری

در حال حاضر می خواهید به حساب کاربری خود وارد شوید؟ برای ورود کلیک کنید

ورود به سیستم

  • مرور توسط کاربر    0 کاربر

    هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.