C# ile iki döngü nasıl bir anda bitirilebilir?

Cengizhanjj

Femtopat
Katılım
8 Aralık 2022
Mesajlar
52
Daha fazla  
Cinsiyet
Erkek
Selam c# programında iki döngüyü tek komutla bitirmek istiyorum.

Kod: using System; namespace hesapmakinesi { public class Program { static void Main(string[] args) { int sayi1_giris, sayi2_giris; double sonuc; string islem; while (true) while(true) { { try { Console.WriteLine("Bir sayı girin:"); sayi1_giris = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("İkinci sayıyı girin:"); sayi2_giris = Convert.ToInt32(Console.ReadLine()); } catch (ArgumentNullException) { Console.WriteLine("Değer girmediniz. Program Kapatılıyor"); break; } catch(FormatException) { Console.WriteLine("Hatalı bir Veri girdiniz Başa döndürülüyor"); break; } Console.WriteLine("İşlem seçin 1 carpma,2 bölme,3 toplama,4 cikarma q yazarsaniz program biter"); islem = Console.ReadLine(); if (islem == "q") { Console.WriteLine("Program bitiriliyor\nYapımcı: Cengizhan Kuruderioglu"); break; } if (islem == "1") { sonuc = sayi1_giris * sayi2_giris; Console.WriteLine("Sonuç: " + sonuc); } if (islem == "2") { sonuc = sayi1_giris / sayi2_giris; Console.WriteLine("Sonuç: " + sonuc); } if (islem == "3") { sonuc = sayi1_giris + sayi2_giris; Console.WriteLine("Sonuç: " + sonuc); } if (islem == "4") { sonuc = sayi1_giris - sayi2_giris; Console.WriteLine("Sonuç: " + sonuc); } else { Console.WriteLine("Yanlış bir veri girildi"); } } }}}}
 
Satıriçi kod paylaşma. Düzgünce paylaş ki okunur olsun. Bu yüzden koda bakıp anlamaya çalışmayacağım.

C#'ta for, foreach veya while var bildiğim kadarıyla. İçteki döngüden bir if atıp break ile çıkarsın. Dıştaki döngü için de bir flag değişkeni tanımlar onun değerini içeride değiştirirsin ve dıştaki döngüde sürekli kontrol edersin.

Ama yapma. Bu kötü. Tanıdığım birisi bana böyle çalışan bir kod getirse onunla bir daha programlama hakkında konuşmam.
Döngülerini düzgünce kurarsan (gerekirse döngü kurmadan işi yaparsan) buna ihtiyacın olmaması lazım. İlla olacağı bir durumu bu güne kadar görmedim. Örneğiniz varsa paylaşın.
 
Sorunu siz yazarken çözdüm
Fakat hala sorun alıyorum.

Hatalar use of unassign local varible "sayi1"
use of unassign local varible "sayi2"
Kod:
C#:
using System;
namespace hesapmakinesi
{
public class Program
    {
        static void Main(string[] args)
        {
            int sayi1, sayi2;

            double sonuc;

            string islem;

            while (true)
            {
            
            
            
                
            while(true)
            {
             try
             {
                Console.WriteLine("Bir sayı girin:");
            
                sayi1= Convert.ToInt32(Console.ReadLine());

                Console.WriteLine("İkinci sayıyı girin:");
                sayi2 = Convert.ToInt32(Console.ReadLine());

}

catch (ArgumentNullException)
{
  Console.WriteLine("Değer girmediniz. Program Kapatılıyor");
  break;
}
catch(FormatException)
{
    Console.WriteLine("Hatalı bir Veri girdiniz Başa döndürülüyor");
    break;
}
}
                Console.WriteLine("İşlem seçin 1 carpma,2 bölme,3 toplama,4 cikarma");
                islem = Console.ReadLine();
                if (islem == "1")
                {
                    sonuc = sayi1 * sayi2;
                    Console.WriteLine("Sonuç: " + sonuc);
                    
                }
                if (islem == "2")
                {
                    sonuc = sayi1/ sayi2;
                    Console.WriteLine("Sonuç: " + sonuc);
                
                }
                 if (islem == "3")
                {
                    sonuc = sayi1 + sayi2;
                    Console.WriteLine("Sonuç: " + sonuc);
                    
                
                }
                  if (islem == "4")
                {
                    sonuc = sayi1 - sayi2;
                    Console.WriteLine("Sonuç: " + sonuc);
             if (islem=="q") 
             {
                 Console.WriteLine("Program bitiriliyor");
                
             }
             else
           {
               Console.WriteLine("Yanlış bir veri girildi");
           }
            
              
        }
        
        
        
      
            }
 
            
}}}
 
Indentation öğrenin. Hala okunaklı bir kod değil... Ve şaşırtmıyor. Parantez hatanız var. Veya kopyalarken bir şekilde hata yaptınız.

Hatanın sebebi try catch yapmanızdandır. Try kısmı çalışmazsa o değişkenlere değer atanmamış olacak. Aşağıda değerlerini kıyaslamaya çalışacaksınız. İlk değer atayın. Ama aşağıda kullanmayı da engelleyin. Program kapatılıyorsa return etsin. Niye break ediyor?
Umuyorum ki q ile çıkma işi işlem 4'ün içinde olmamalıydı. Program size parantez eksik dedi ve siz de en sondaki 3 parantezden birini, belki de ikisini eklediniz oraya.
Fonksiyon kullanın. Bu sayede geçerli sayı alma işini bir fonksiyonda yapabilir, iç içe 2 while true döngüsünden kurtulabilirsiniz.

Programlamada yapmamanız gereken başka bir şey while true kullanmak. Gerçekten lazım olduğu durumların sayısı yok denecek kadar az.

İnternette bir site üzerinden otomatik şekilde düzeltilmiş hali.
Kod:
using System;
namespace hesapmakinesi {
    public class Program {
        static void Main(string[] args) {
            int sayi1, sayi2;

            double sonuc;

            string islem;

            while (true) {

                while (true) {
                    try {
                        Console.WriteLine("Bir sayı girin:");

                        sayi1 = Convert.ToInt32(Console.ReadLine());

                        Console.WriteLine("İkinci sayıyı girin:");
                        sayi2 = Convert.ToInt32(Console.ReadLine());

                    } catch (ArgumentNullException) {
                        Console.WriteLine("Değer girmediniz. Program Kapatılıyor");
                        break;
                    } catch (FormatException) {
                        Console.WriteLine("Hatalı bir Veri girdiniz Başa döndürülüyor");
                        break;
                    }
                }
                Console.WriteLine("İşlem seçin 1 carpma,2 bölme,3 toplama,4 cikarma");
                islem = Console.ReadLine();
                if (islem == "1") {
                    sonuc = sayi1 * sayi2;
                    Console.WriteLine("Sonuç: " + sonuc);

                }
                if (islem == "2") {
                    sonuc = sayi1 / sayi2;
                    Console.WriteLine("Sonuç: " + sonuc);

                }
                if (islem == "3") {
                    sonuc = sayi1 + sayi2;
                    Console.WriteLine("Sonuç: " + sonuc);

                }
                if (islem == "4") {
                    sonuc = sayi1 - sayi2;
                    Console.WriteLine("Sonuç: " + sonuc);
                    if (islem == "q") {
                        Console.WriteLine("Program bitiriliyor");

                    } else {
                        Console.WriteLine("Yanlış bir veri girildi");
                    }

                }

            }

        }
    }
}
İlla cins cins parantez kullanacağım diyorsanız bu şekilde yazın. Çok temiz oluyor.
Kod:
using System;namespace hesapmakinesi
{public class Program
{static void Main(string[]args)
{int sayi1,sayi2;double sonuc;string islem;while(true)
{while(true)
{try
{Console.WriteLine("Bir sayı girin:");sayi1=Convert.ToInt32(Console.ReadLine());Console.WriteLine("İkinci sayıyı girin:");sayi2=Convert.ToInt32(Console.ReadLine());}
catch(ArgumentNullException)
{Console.WriteLine("Değer girmediniz. Program Kapatılıyor");break;}
catch(FormatException)
{Console.WriteLine("Hatalı bir Veri girdiniz Başa döndürülüyor");break;}}
Console.WriteLine("İşlem seçin 1 carpma,2 bölme,3 toplama,4 cikarma");islem=Console.ReadLine();if(islem=="1")
{sonuc=sayi1*sayi2;Console.WriteLine("Sonuç: "sonuc);}
if(islem=="2")
{sonuc=sayi1/sayi2;Console.WriteLine("Sonuç: "sonuc);}
if(islem=="3")
{sonuc=sayi1 sayi2;Console.WriteLine("Sonuç: "sonuc);}
if(islem=="4")
{sonuc=sayi1-sayi2;Console.WriteLine("Sonuç: "sonuc);if(islem=="q")
{Console.WriteLine("Program bitiriliyor");}
else
{Console.WriteLine("Yanlış bir veri girildi");}}}}}}
 
Hocam metod içinden değil döngü içinden nasıl çıkacağını sormuş.
Kodu okusaydınız while içinden çıktığında kodun bittiğini görebilirdiniz.
İlk yaptığın kodu kullandığım zamanda aynı hatayı alıyorum return kullanınca da sadece sayıları istiyor.
Süslü parantez yanlışlarınız var.
C#:
using System;
namespace hesapmakinesi
{
    public class Program
    {
        static void Main(string[] args)
        {
            int sayi1 = 0, sayi2 = 0; //varsayılan değerlerin eklenmesi.
            double sonuc = 0;
            string islem;
            while (true)
            {
                while(true)
                {
                    try
                    {
                        Console.WriteLine("Bir sayı girin:");
                        sayi1= Convert.ToInt32(Console.ReadLine());
                        Console.WriteLine("İkinci sayıyı girin:");
                        sayi2 = Convert.ToInt32(Console.ReadLine());
                    }
                    catch (ArgumentNullException)
                    {
                        Console.WriteLine("Değer girmediniz. Program Kapatılıyor");
                        break;
                    }
                    catch(FormatException)
                    {
                        Console.WriteLine("Hatalı bir Veri girdiniz Başa döndürülüyor");
                        break;
                    }
                } //ilk while bloğu tamamen sayı almak üzerine kurulu, değerler doğru girildiğinde tekrar tekrar almaya devam edecek.
                Console.WriteLine("İşlem seçin 1 carpma,2 bölme,3 toplama,4 cikarma");
                islem = Console.ReadLine();
                if (islem == "1")
                {
                    sonuc = sayi1 * sayi2;
                    Console.WriteLine("Sonuç: " + sonuc);
                }
                if (islem == "2")
                {
                    sonuc = sayi1/ sayi2;
                    Console.WriteLine("Sonuç: " + sonuc);
                }
                if (islem == "3")
                {
                    sonuc = sayi1 + sayi2;
                    Console.WriteLine("Sonuç: " + sonuc);
                }
                if (islem == "4")
                {
                    sonuc = sayi1 - sayi2;
                    Console.WriteLine("Sonuç: " + sonuc);
                    if (islem=="q")
                    {
                        Console.WriteLine("Program bitiriliyor"); //return burada kullanılacak.
                    }
                    else
                    {
                        Console.WriteLine("Yanlış bir veri girildi");
                    }
                }
            }
        }
    }
}
 
Sürekli sayı istiyor artık.
Kodu okusaydınız while içinden çıktığında kodun bittiğini görebilirdiniz.

Süslü parantez yanlışlarınız var.
C#:
using System;
namespace hesapmakinesi
{
    public class Program
    {
        static void Main(string[] args)
        {
            int sayi1 = 0, sayi2 = 0; //varsayılan değerlerin eklenmesi.
            double sonuc = 0;
            string islem;
            while (true)
            {
                while(true)
                {
                    try
                    {
                        Console.WriteLine("Bir sayı girin:");
                        sayi1= Convert.ToInt32(Console.ReadLine());
                        Console.WriteLine("İkinci sayıyı girin:");
                        sayi2 = Convert.ToInt32(Console.ReadLine());
                    }
                    catch (ArgumentNullException)
                    {
                        Console.WriteLine("Değer girmediniz. Program Kapatılıyor");
                        break;
                    }
                    catch(FormatException)
                    {
                        Console.WriteLine("Hatalı bir Veri girdiniz Başa döndürülüyor");
                        break;
                    }
                } //ilk while bloğu tamamen sayı almak üzerine kurulu, değerler doğru girildiğinde tekrar tekrar almaya devam edecek.
                Console.WriteLine("İşlem seçin 1 carpma,2 bölme,3 toplama,4 cikarma");
                islem = Console.ReadLine();
                if (islem == "1")
                {
                    sonuc = sayi1 * sayi2;
                    Console.WriteLine("Sonuç: " + sonuc);
                }
                if (islem == "2")
                {
                    sonuc = sayi1/ sayi2;
                    Console.WriteLine("Sonuç: " + sonuc);
                }
                if (islem == "3")
                {
                    sonuc = sayi1 + sayi2;
                    Console.WriteLine("Sonuç: " + sonuc);
                }
                if (islem == "4")
                {
                    sonuc = sayi1 - sayi2;
                    Console.WriteLine("Sonuç: " + sonuc);
                    if (islem=="q")
                    {
                        Console.WriteLine("Program bitiriliyor"); //return burada kullanılacak.
                    }
                    else
                    {
                        Console.WriteLine("Yanlış bir veri girildi");
                    }
                }
            }
        }
    }
}

Selam sorunu çözdüm fakat C# ile üst satıra nasıl geçebilirim?
 
Son düzenleme:
Artı -2 Eksi

Technopat Haberler

Yeni konular

Geri
Yukarı