PDA

View Full Version : تابع window



hercules_3d
جمعه 22 اردیبهشت 1385, 16:29 عصر
با سلام
یه سوال در مورد تابع window داشتم آیا استفاده از این تابع (مثلا با این مختصات window(3,2,20,30) )در برنامه به این منظور ه که تمام کارهای گرفتن ورودی ها و چاپ اون ها داخل همین window انجام شه ؟؟؟ میشه یه مثال بزنید که یه window در داخل برنامه تعریف کنه و یه عدد رو از کاربر گرقته و همون رو چاپ کنه؟

Mahdi_Delphi
جمعه 22 اردیبهشت 1385, 16:47 عصر
این مثال کمک کننده است:


#include <conio.h>

int main(void)
{

clrscr();
window(5,2,5,15);
textcolor(BLACK);
textbackground(RED);
cprintf("Mahdi");
getch();
return 0;
}

به این هم توجه کن :


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

int main(void)
{

clrscr();
window(5,2,10,15);
textcolor(BLACK);
textbackground(RED);
cprintf("Enter: ");
int x;
cscanf("%d",x);

getch();
return 0;
}

hercules_3d
جمعه 22 اردیبهشت 1385, 17:52 عصر
فرض کنید کد اول رو به این صورت بنویسیم

#include <conio.h>
#include <iostream.h>

int main(void)
{

clrscr();
window(5,2,40,15);
textcolor(BLACK);
textbackground(RED);
clrscr();
cprintf("Mahdi");
int x;
cin >> x;
cout << x;
getch();
return 0;
}سوال ؟
چرا عددی رو که وارد می کنم اونو در خارج از پنجره ی قرمز چاپ میکنه در حالی که پنجره ی اکتیو من همون پنجره قرمزس؟

Mahdi_Delphi
جمعه 22 اردیبهشت 1385, 19:00 عصر
مشکلت ناشی از cin و cout است.
از cprintf و cscanf استفاده کن.

hercules_3d
جمعه 22 اردیبهشت 1385, 19:28 عصر
اخه با اینها هم مشکل دارم
#include <conio.h>
#include <iostream.h>

int main(void)
{

clrscr();
window(5,2,40,15);
textcolor(BLACK);
textbackground(RED);
clrscr();
cprintf("Mahdi");
int x;
cscanf("%d",&x);
getch();
cprintf("%d",x);
getch();
return 0;
}
رشته ی mahdi رو چاپ میکنه و بعد بغل دستش یه عدد (مثلا 20 )رو میخونه بعد 20 رو رشته ی mahdi چاپ می کنه تازه اگه اون getch رو بعد cscanf نذارم نمی تونم چاپ شده ی 20 رو ببینم
یه جورایی انگار getch در حکم زدن اینتره مگه خاصیت cscanf , cprintf چیه؟
نگو که برای اینکه عدد رو رشته نیفته مجبورم از gotoxy استفاده کنم !!

Mahdi_Delphi
جمعه 22 اردیبهشت 1385, 20:01 عصر
ببین این مشکلت رو حل میکنه:


#include <conio.h>
#include <iostream.h>

int main(void)
{

clrscr();
textcolor(BLACK);
textbackground(RED);
clrscr();
window(5,2,12,15);
cprintf("Mahdi:");
int x;
cscanf("%d",&x);
getch();
cprintf("\n%d",x);
cout<<"<END>";
getch();
return 0;
}

Mahdi_Delphi
جمعه 22 اردیبهشت 1385, 20:35 عصر
تازه اگه اون getch رو بعد cscanf نذارم نمی تونم چاپ شده ی 20 رو ببینم
یه جورایی انگار getch در حکم زدن اینتره مگه خاصیت cscanf , cprintf چیه؟

ببینید ، تابع cscanf نیاز نداره که حتما بعد از وارد کردن عدد، enter زده بشه،بلکه هر کاراکتر غیر عددی ای رو که وارد بکنید به کار خوندن عدد خاتمه میده.
این تابع ملاک پایان یافتن ورود داده رو رسیدن به یک کاراکتر غیر مجاز قرار میده.
مثلا اگه پارامتر ورودی تابع cscanf یه عدد باشه اگه بعد از وارد کردن 123 ما کاراکتر s رو بزنیم تابع عدد 123 رو میخونه.
یا اگه پارامتر ورودی ما یه رشته باشه ،رسیدن به space اتمام فرایند ورود داده رو مشخص میکنه.

این تابع اون کاراکتری رو که موجب قطع فرایند خوندن میشه رو رد نمیکنه و به همین خاطر هست که اون کاراکتر میره توی getch بعد از دستورالعمل.
اینجا رو یه نگاه بنداز : http://www.barnamenevis.org/forum/showthread.php?t=44810
شبیه همینه .

hercules_3d
شنبه 23 اردیبهشت 1385, 06:47 صبح
اقا دستت درد نکنه منتها من یه جایی رو حالیم نمیشه فرض کنید با توجه به کدی که نوشتین عرض window رو زیاد کنیم و'\n' از cprintf برداریم حالا اینتر رو به عنوان کاراکتر نا معتبر وارد می کنم تا اونجایی که من حالیم شد تابع cscanf این کاراکتر رو رد نمی کنه و تابع getch این کارکتر نامعتبر(اینتر) رو میگیره حالا سوالم اینجاست که چرا وقتی کلید اینتر رومیزنم عدد ی که قراره چاپ شه میره روی رشته چاپ میشه ؟؟
و حالا کد زیر رو در نظر بگیرید :
#include <conio.h>
#include <iostream.h>
int main()
{
textcolor(BLACK);
textbackground(RED);
window(3,2,30,20);
clrscr();
cprintf("enter :");
int x;
cscanf("%d",&x);
getch();
cprintf("%d\nYes",x);
getch();
return 0;
}
سوال : فرض کنید عددی که میخواهم وارد کنم 652 هستش
چرا اول عدد رو چاپ میکنه (البته رورشته ی اینتر) بعد یه سطر میاد پایین و به اندازه ی تعداد ارقام عدد فضای خالی چاپ میشه بعد رشته ی yes رو چاپ می کنه؟؟؟

Mahdi_Delphi
شنبه 23 اردیبهشت 1385, 07:37 صبح
چرا اول عدد رو چاپ میکنه (البته رورشته ی اینتر) بعد یه سطر میاد پایین و به اندازه ی تعداد ارقام عدد فضای خالی چاپ میشه بعد رشته ی yes رو چاپ می کنه؟؟؟


به این دقت کنید :


#include <iostream.h>
#include <conio.h>

int main()
{
textcolor(BLACK);
textbackground(RED);
window(3,2,30,20);
clrscr();
cprintf("enter :");
int x;
cscanf("%d",&x);
getch();
cprintf("\n%dYes",x);
getch();
return 0;
}

Mahdi_Delphi
شنبه 23 اردیبهشت 1385, 07:41 صبح
در ضمن برای اینکه کدهایی رو که اینجا میزارین خوانا باشه به قسمت "حالت پیشرفته" برین و کدها رو بین تگ های کد (با دکمه #) قرار بدین.

[CODE]-- اینجا کد رو قرار بدین -- [/ CODE]

موفق باشید.

hercules_3d
شنبه 23 اردیبهشت 1385, 20:02 عصر
آقا دستتون درد نکنه حالا متوجه اهمیت ترتیب قرار گرفتن %d شدم منتها یه سوال برام باقی مونده ؟! باز این کد رو در نظر بگیرید

#include <iostream.h>
#include <conio.h>

int main()
{
textcolor(BLACK);
textbackground(RED);
window(3,2,30,20);
clrscr();
cprintf("enter :");
int x;
cscanf("%d",&x);
getch();
cprintf("%dYes",x);
getch();
return 0;
}
چرا چیزی که قراره چاپ شه می ره رو رشته enter : چاپ میشه من دلیل این کارو میخواهم بدونم نه این که برای حل این مشکل یه \n در تابع cprintf قرار بدم
با تشکر از کمکی که می کنید

Mahdi_Delphi
شنبه 23 اردیبهشت 1385, 20:33 عصر
چرا چیزی که قراره چاپ شه می ره رو رشته enter : چاپ میشه من دلیل این کارو میخواهم بدونم نه این که برای حل این مشکل یه \n در تابع cprintf قرار بدم
با تشکر از کمکی که می کنید

دلیلش اینه که تابع cscanf خودش با تمام شدن عملیات خواندن ورودی، n/ رو اعمال نمیکنه و فقط r/ رو اعمال میکنه.
این هم دلیلش !

hercules_3d
شنبه 23 اردیبهشت 1385, 21:19 عصر
با تشکر از کمکتون

hercules_3d
شنبه 23 اردیبهشت 1385, 21:19 عصر
با تشکر از کمکتون

Mahdi_Delphi
یک شنبه 24 اردیبهشت 1385, 07:35 صبح
قابلی نداشت دوست عزیز