PDA

View Full Version : چرا باید از cin.get() در ته ویژال استدیو استفاده کنیم؟



hosseinam1370
شنبه 14 تیر 1393, 13:57 عصر
چرا باید از cin.get() در ته ویژال استدیو استفاده کنیم؟
اصلا چه دلیلی داشت مایکروسافت بیاد این کار و بکنه که مثلا از حالت کنسول خارج شه؟
#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
int b ;
int c = 20;
cout << &c;
cin.get();
}



تازه وقتی که میخایم ورودی بگیریم ،باید 2 بار cin.get() بنویسیم تا جناب کنسول اپلیکیشن بعد از اجرای برنامه ،خودش خارج نشه از برنامه.:متفکر:

کامبیز اسدزاده
شنبه 14 تیر 1393, 14:06 عصر
چرا باید از cin.get() در ته ویژال استدیو استفاده کنیم؟
اصلا چه دلیلی داشت مایکروسافت بیاد این کار و بکنه که مثلا از حالت کنسول خارج شه؟
#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
int b ;
int c = 20;
cout << &c;
cin.get();
}



تازه وقتی که میخایم ورودی بگیریم ،باید 2 بار cin.get() بنویسیم تا جناب کنسول اپلیکیشن بعد از اجرای برنامه ،خودش خارج نشه از برنامه.:متفکر:

ربطی به جناب مایکروسافت نداره ! اینها توابع و کلاس های موجود در C++ هستند.
شما باید تابعی اجرا کنید که بتونید از کاربر اطلاعات دریافت کنید یا نه ؟ اگه از این تابع get استفاده نکنید که نمیتونید اطلاعاتی رو دریافت کنید ! در این میان cin.get یکی از استاندارد ترین متد های دریافت مقادیر هستش که در C++ مورد استفاده قرار میگیره.

درضمن در سوال قبلی شماهم اشاره کردم نیازی به دوبار نوشتن cin.get نیست وقتی شما 2 بار مینویسی cin.get یعنی 2 بار پشت سرهم دارید درخواست دریافت مقدار میکنید !
برای نگه داشتن کنسول در حالت اجرا دستور زیر رو قبل از return قرار بدین.


system("pause");

مسعود اقدسی فام
شنبه 14 تیر 1393, 15:29 عصر
دستورات انتهایی برای باز نگه داشتن کنسول صرفا در زمان طراحی معنی داره. زمانی که برنامه به طور کامل نوشته شد و قرار بر انتشار هست، باید این دستورات حذف بشن. حتما با کنسول ویندوز کار کردید. وقتی دستوری مثل ping یا format را وارد می‌کنید برای خروج از برنامه منتظر می‌مونه Enter بزنید؟ نه منتظر نمی‌مونه. دلیلش هم این هست که پنجره‌ی کنسول ویندوز (cmd) حتی اگه اجرای برنامه تموم بشه بازم باز می‌مونه.
اما در زمان طراحی چون پنجره‌ی مشکی کنسول بعد از تموم شدن برنامه اتوماتیک بسته می‌شه، برای جلوگیری از بسته شدن از این دست دستورات استفاده می‌شه. البته بسته به اینکه از چه محیط برنامه‌نویسی استفاده کنید، ممکنه امکان تنظیم بسته نشدن اتوماتیک پنجره‌ی کنسول هم وجود داشته باشه.

hosseinam1370
شنبه 14 تیر 1393, 16:13 عصر
ربطی به جناب مایکروسافت نداره ! اینها توابع و کلاس های موجود در C++‎‎‎‎‎‎‎‎‎ هستند.
شما باید تابعی اجرا کنید که بتونید از کاربر اطلاعات دریافت کنید یا نه ؟ اگه از این تابع get استفاده نکنید که نمیتونید اطلاعاتی رو دریافت کنید ! در این میان cin.get یکی از استاندارد ترین متد های دریافت مقادیر هستش که در C++‎‎‎‎‎‎‎‎‎ مورد استفاده قرار میگیره.

درضمن در سوال قبلی شماهم اشاره کردم نیازی به دوبار نوشتن cin.get نیست وقتی شما 2 بار مینویسی cin.get یعنی 2 بار پشت سرهم دارید درخواست دریافت مقدار میکنید !

سلام.
منظور من این هست: ببینید شما میتونید با یبار نوشتن cin.get() خروجی برنامه رو ببینید:
#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
int b ;
int c ;
cout << "ye adad vared kon doste aziz : ";
cin >> c;
cout << &c;
cin.get();
cin.get();

}

البته دقت کنید که حتما با ویژال استدیو 2012 باشه.


در ضمن خیلی ممنون از این کد :
system("pause");



تا الان تو ویژال استدیو 2012 perss any key to continu ... نداشتم ،ولی با این کد اومد.
یه لطف کنید یه توضیح کوچولو بدید ممنون میشم .


.....

آقای اقدسی فام یعنی ما اصلا تو پروژه ی اصلی نیاز نداریم که کنسول باز بمونه؟یا مثلا نمیشه یه پروژه ساخت که مثلا فقط کنسول باشه؟




خیلی ممنون از دوستان که راهنمایی میکنید.

کامبیز اسدزاده
شنبه 14 تیر 1393, 16:23 عصر
سلام.
منظور من این هست: ببینید شما میتونید با یبار نوشتن cin.get() خروجی برنامه رو ببینید:
#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
int b ;
int c ;
cout << "ye adad vared kon doste aziz : ";
cin >> c;
cout << &c;
cin.get();
cin.get();

}

البته دقت کنید که حتما با ویژال استدیو 2012 باشه.


استفاده از cin.get به صورت پشت سر هم برای فقط نمایش کنسول اصلا درست نیست ! هیچند به جوابتون میرسید ولی برای مشاهده کنسول بعد از عمل cin روشی که گفتم رو حتما به کار بگیرید.
در روشی که شما استفتاده میکنید وقتی 2 بار cin.get میزنی بعد از وارد کردن مقدار اول کنسول محو نمیشه و دلیلش اینه شما باید یک مقدار دیگه ای هم وارد کنید.

بهترین راهش همینه :

#include <iostream>
using namespace std;


int main()
{
int b;
int c;
cout << "ye adad vared kon doste aziz : ";
cin >> c;
cout << &c;
cin.get();


system("PAUSE");


}

Abolloty
سه شنبه 17 تیر 1393, 14:04 عصر
اصلا شما یه کار کن بیا فایل سرآیند conio.h رو ضمیمه کن و از getch()در آخر استفاده کن خیلی هم راحت تره

motherboard
سه شنبه 17 تیر 1393, 14:23 عصر
واقعا خسته نشدی از این IDE های دو هزاری.؟؟!!! برو کیوت نصب کن.هم محیط کنسولی داره و هم محیط یکپارچه ویندوزی.چی از این بهتر.برای ثابت نگه داشتن برنامه در محیط کنسولی این مد شده که یک ()getch در اخر هر برنامه اضافه کنیم تا برنامه ثابت نگه داشته بشه.در حالی که فلسفه استفاده از ()getch این نیست.هم ()getch داریم و هم ()getche .این ها بیشتر برای زدن یک کلید . یا کاراکتر استفاده میشه.()cin.get هم یک کار مشابه ()getch رو انجام میده اما فرقی که داره اینه که ()getch به صورت تابع خالی هست و این یکی به صورت تابع عضو شی یک کلاس.
دستور
system("PAUSE");

برای نگه داشتن صفحه کنسولی مناسب تره.ولی به هر حال شما یک کیوت رو نصب کن (رو مزخرف ترین سیستم ها هم جواب میده برعکس ویژوال استودیو!!!!).خود کیوت به صورت پیش فرض این امکان رو فراهم کرده تا برنامه کنسولی ثابت نگه داشته بشه و نیازی به ()getch و امثال این ها نداره.

مسعود اقدسی فام
سه شنبه 17 تیر 1393, 14:40 عصر
اصلا شما یه کار کن بیا فایل سرآیند conio.h رو ضمیمه کن و از getch()در آخر استفاده کن خیلی هم راحت تره


conio.h استاندارد‌ نیست و استفاده از اون توصیه نمی‌شه.
(http://en.wikipedia.org/wiki/Conio.h)
http://en.wikipedia.org/wiki/Conio.h


منم Qt رو توصیه می‌کنم. البته خودم ویژوال خیلی کار کردم و هنوزم گاهی استفاده می‌کنم. اما برای ++C کیوت یه چیز دیگه‌س.

مسعود اقدسی فام
سه شنبه 17 تیر 1393, 14:44 عصر
سلام.


آقای اقدسی فام یعنی ما اصلا تو پروژه ی اصلی نیاز نداریم که کنسول باز بمونه؟یا مثلا نمیشه یه پروژه ساخت که مثلا فقط کنسول باشه؟




خیلی ممنون از دوستان که راهنمایی میکنید.

بستگی به کاربری برنامه‌تون داره. برنامه‌های تحت کنسول معمولا از طریق کنسول (cmd ویندوز و terminal لینوکس) اجرا می‌شن. وقتی قبل از اجرای برنامه کنسول رو باز می‌کنید، تموم شدن برنامه هم کنسول رو نمی‌بنده. پس نیازی نیست از دستوراتی که اینجا بحثش شده استفاده کنید. اما شاید این مساله رو مد نظر داشته باشید که کاربر برنامه رو مستقیم (خارج از کنسول) اجرا کنه. در این حالت کنسول به صورت موقت برای اجرای برنامه باز می‌شه و وقتی برنامه تموم شد بسته می‌شه.
این شما هستید که متناسب با نیاز و اهداف برنامه تصمیم می‌گیرد که از دستورات بحث شده در اینجا استفاده کنید یا نه. مثال زدم که مثلا format یا ping آخر کار منتظر کلیدی از کاربر نمی‌مونن.

a.r.khoshghalb
چهارشنبه 18 تیر 1393, 22:39 عصر
سلام
دوست عزیز من در رابطه با Qt اطلاعی ندارم اما اگر از Visual studio استفاده می کنی می تونی وقتی می خوای کدت کامپایل و بعد ران بشه از کلید های Ctrl + F5 استفاده کنی... اگر از این دو دکمه استفاده کنی کنسول باز میمونه و نیازی به cin.get() یا system("pause") هم نیست...
شما تو پست اولت اومدی از مایکروسافت انتقاد کردی ولی میبینی که مایکروسافت خودش یه امکانی اضافه کرده که این مشکل شما حل بشه بدون کد زدن... :لبخند:

کامبیز اسدزاده
پنج شنبه 19 تیر 1393, 10:39 صبح
سلام
دوست عزیز من در رابطه با Qt اطلاعی ندارم اما اگر از Visual studio استفاده می کنی می تونی وقتی می خوای کدت کامپایل و بعد ران بشه از کلید های Ctrl + F5 استفاده کنی... اگر از این دو دکمه استفاده کنی کنسول باز میمونه و نیازی به cin.get() یا system("pause") هم نیست...
شما تو پست اولت اومدی از مایکروسافت انتقاد کردی ولی میبینی که مایکروسافت خودش یه امکانی اضافه کرده که این مشکل شما حل بشه بدون کد زدن... :لبخند:

این امکانات ربطی به MS نداره که...
فرض کن برنامه رو release کرد و داد بیرون در این حالت چیرو باید CTRL+F5 کنه !!!؟ حتما باید از دستورات لازم استفاده کنید.
در Qt یا هر IDE دیگه کنسول در حالت Debug Test فعال هستش.

a.r.khoshghalb
پنج شنبه 19 تیر 1393, 12:14 عصر
این امکانات ربطی به MS نداره که...
فرض کن برنامه رو release کرد و داد بیرون در این حالت چیرو باید CTRL+F5 کنه !!!؟ حتما باید از دستورات لازم استفاده کنید.
در Qt یا هر IDE دیگه کنسول در حالت Debug Test فعال هستش.

دوست من عرض کردم "می تونی وقتی می خوای کدت کامپایل و بعد ران بشه از کلید های Ctrl + F5 استفاده کنی"... توجه کن : "وقتی می خوای کدت کامپایل و بعد ران بشه"
خیلی روشنه منظورم برای استفاده اش از VS بوده نه وقتی برنامه release شده...

hosseinam1370
پنج شنبه 19 تیر 1393, 18:57 عصر
دوستان من دارم c++ رو تموم میکنم ، تا اینکه بتونم از qt استفاده کنم،
اینآ فقط برای رفتن به سمت کیوت هست.

qt فوق العاده هست.