PDA

View Full Version : سوال: چرا شرط حلقه while اجرا نمی شود



Eric 2
دوشنبه 03 شهریور 1393, 23:52 عصر
این کد رو د رنظر بگیرید


static void Main(string[] args)
{
Console.WriteLine("please insert any key to continue or q,Q to quit:");
string input= Console.ReadLine();


while (input != "Q" ||input != "q")
{
Console.WriteLine("this is your string:" + input);
Console.WriteLine("please press any key to continue or q,Q to quit:");
input = Console.ReadLine();


//if (input == "Q" || input == "q" )
// break;
}


شرط حلقه while برای من همیشه true است
حالا سوالم اینه چرا اگر while رو شرطش رو true بذارم وif رو از کامنت در بیارم درست میشه چرا شرط برای ایف درسته ولی برای ویل نه؟
اینم عکس کد اگر کدها بهم ریخته شد
122680
پیشاپیش ممنون بخاطر وقتی که گذاشتین وخوندید

mh3242
سه شنبه 04 شهریور 1393, 00:03 صبح
از این کد استفاده کن مشکلت حل میشه:




Console.WriteLine("please insert any key to continue or q,Q to quit:");
string input = Console.ReadLine();




while (input.ToUpper() != 'Q'.ToString())
{
Console.WriteLine("this is your string:" + input);
Console.WriteLine("please press any key to continue or q,Q to quit:");
input = Console.ReadLine();




//if (input == "Q" || input == "q" )
// break;
}

Eric 2
سه شنبه 04 شهریور 1393, 00:21 صبح
من بیشتر دنبال یاد گرفتنم اگه میشه توضیح بدید
چون من منابع ام یک کتاب دایتل است و اینترنت خیلی ممنون

plus
سه شنبه 04 شهریور 1393, 00:24 صبح
علت اینه که شطری که در while گذاشتین در هر صورت true هست:

while (input != "Q" ||input != "q")

طبیعتا مقدار رشته ای "q" و مقدار رشته ای "Q" با هم متفاوت هست. بنابراین مقدار input هرچی که باشه، همیشه حداقل یکی از دو شرط برقراره (یک مقدار نمیتونه هم q باشه هم Q بنابراین input یا برابر Q نیست، یا برابر q نیست یا با هیچ کدوم برابر نیست) و چون بینشون از عملگر OR (یا) استفاده کردین، وقتی یکی از شروط برقرار باشه حاصل true میشه.
شما میتونید شرط رو با عمگر AND اعمال کنید.در این حالت تا زمانی حلقه اجرا باشه که input نه q باشه و نه Q.

while (input != "Q" && input != "q")

شرطی که در if نوشتین این اشتباه (همیشه برابر true یا false بودن) رو نداره چون عملگر == استفاده کردین.در این حالت اگه input برابر q باشه، یا برابر Q باشه مقدار true هست و اگه input هیچ کدوم از اینها نباشه false.