C/C++ C++ öğreniyorum gün 2

darkinbox

Hectopat
Katılım
8 Ocak 2021
Mesajlar
1.144
Çözümler
17
Yer
Aydın
Daha fazla  
Sistem Özellikleri
w3schools.com
Cinsiyet
Erkek
Meslek
Bilgisayar Mühendisi
C++ öğreniyorum ve gün 2

C++:
#include <iostream> // Includes Input&Output Stream In C++
#include <cmath> // Includes C Math Algorithm In C++
#include <string> // Includes String Algorithm In C++
using namespace std; // Namespace Library Is Being Used In C++
int Got;
int main() {
 string Country;
 int myAge;

 cout << "Yasinizi asagiya yaziniz! \n";
 cin >> myAge;
 cout << "Belirli bir ulke seciniz! ( ornegin : Turkey, TR, Tr, T, turkey, tr, t ) \n Turkey \n USA \n Canada \n ";

 cin >> Country;
 if ( Country == "Turkey", "TR", "Tr", "T", "turkey", "tr", "t") {
 int votingAge = 18;
 int myA = (myAge >= votingAge);
 if (myA == 1) {
 cout << "Ulkenizin secimlerinde oy verebilecek yastasiniz!";
 }
 else { cout << "Ulkenizin secimlerinde oy verebilecek yasa gelmek icin " << votingAge - myAge << " kadar yil beklemelisiniz!"; }
 }
 else if (Country == "USA", "US", "Us", "U", "usa", "us", "u") {
 int votingAge = 21;
 int myA = (myAge >= votingAge);
 if (myA == 1) {
 cout << "Ulkenizin secimlerinde oy verebilecek yastasiniz!";
 } else { cout << "Ulkenizin secimlerinde oy verebilecek yasa gelmek icin " << votingAge - myAge << " kadar yil beklemelisiniz!"; }
 } else if (Country == "CANADA", "CA", "Ca", "canada", "ca", "c" ) {
 int votingAge = 18;
 int myA = (myAge >= votingAge);
 if (myA == 1) {
 cout << "Ulkenizin secimlerinde oy verebilecek yastasiniz!";
 cout << "Enter tusuna basarak bu pencereyi kapatabilirsiniz.";
 cin >> Got;
 }
 else { cout << "Ulkenizin secimlerinde oy verebilecek yasa gelmek icin " << votingAge - myAge << " kadar yil beklemelisiniz!";
 cout << "Enter tusuna basarak bu pencereyi kapatabilirsiniz.";
 cin >> Got;
 }

 }

}

Yorumlamak istenirse eğer, C++ bilen birisi yorumlarsa sevinirim

Iyi günler!
 
Son düzenleyen: Moderatör:
C++'a çok hakim değilim yalnız if ( Country == "Turkey", "TR", "Tr", "T", "turkey", "tr", "t") şu ifade hatalı gibi. Normalde if ( Country == "Turkey" || Country == "TR" ... şeklinde olması gerekir.

Ayrıca;
int myA = (myAge >= votingAge);
if (myA == 1) {
gereksiz bir kullanım olmuş. Doğrudan if (myAge >= votingAge) şeklinde kullanılabilir. Hem int myA = (myAge >= votingAge) ifadesi -1 de döndürebilir.
 
Programlamaya ilk defa başlıyorsan, bu kod fena değil. Ama programlama ve algoritma tecrüben varsa direkt çöp.
2. gün olduğunu ve yeni başladığını farzediyorum, o sebeple fena sayılmaz.

Şimdi bu kodu geliştirirken şunu düşünmen beklenir; "Ülkeleri if else ile ayırıyorum ama her durumda benzer işlevleri yapıyorum. Yüzlerce ülke için bu kodu tekrar mı etmem gerek?". Eğer bu tarz bir soru düşündüysen, güzel bir ilerleme var. 3. Gün fonksiyonlardan devam. Sorunun cevabı orada.
 
Kod yanlış. TR ise de TR gelecek, USA ise de TR gelecek. C++'ta böyle bir kullanım yok.
Kodda bu;
C++:
std::string bt;
std::cin >> bt;

if (bt == "Turkey", "TR", "Tr", "T", "turkey", "tr", "t") {
    std::cout << "Turkiye" << std::endl;
}
else if (bt == "USA", "usa", "us", "america") {
    std::cout << "America" << std::endl;
}

Bunun derlerken hata vermemesinin sebebi virgül. Soldan sağa hepsini execute edip, execute ettiği son elemanın doğru olup olmamasına bağlı olarak doğru diyecek. "t" her zaman doğru çıkar. if içerisine bir pointer yerleştirdiğinde (c arrayleri ve tırnak içinde yazdığın yazılar da birer pointerdır), eğer pointerın bir adresi yoksa, point ettiği adres sıfırdır (NULL yada nullptr).

if(0) yanlıştır, ve 0 dışındaki tüm durumlar doğrudur. Dolayısıyla oraya string verdiğinde (const char[]) if(true) olarak gelmiş oluyor ve ne olursa olsun, her daim doğru dönüyor. Ayrı ayrı logic operatörleriyle yazman lazım.

Şöyle yani;
C++:
if (bt == "Turkey" || bt == "TR" || bt == "Tr" || bt == "T" || bt == "turkey" || bt == "tr" || bt == "t") {
    std::cout << "Turkiye" << std::endl;
} else if (bt == "USA" || bt == "usa" || bt == "us" || bt == "america") {
    std::cout << "America" << std::endl;
}

Ek olarak C++'ta || ve && yerine or ve and kullanabilirsin.
 
Selam, çözüm öneriniz için teşekkür ederim ancak debug ettiğimde dediğiniz gibi bir hata ile karşılaşmadım, seçim yaşlarına göre belirtilen ülke geliyor yani, us belirtti iseniz seçim yaşı 21 oluyor bende, tr belirttiyseniz 18. Yorumlamanız için teşekkür ederim.

Yorumlamanız için teşekkür ederim.

Gereksiz kullanım olmuş olabilir mi emin değilim, yorumlamanız için teşekkür ederim.
 
Son düzenleme:
Test girdilerini ve sonuçlarını ekran görüntüsü olarak paylaş burada. Mümkün değil. C++'ta böyle bir kıyas yöntemi yok. , operatörü liste içerisindekilerden birine eşit mi diye kontrol etmeyi sağlamaz. Ne MSVC'de böyle, ne GCC ile, ne CLang ile.

MSVC sonucu;

Yanlış. usa ve 20 yazmama rağmen oy verebilecek yaştasın diyor.
Halbuki kodun bu kısmı 21 diyor;


Clang için de aynı sonuç;


GCC sonucu;


Israrla aynı sonucu almamın tek sebebi, kodun yanlış olması.

Kodda gereksiz çok şey de var mesela.

C++:
int myA = (myAge >= votingAge);
 if (myA == 1) {

Şu satıra bakalım. Neden if(myAge >= votingAge) demiyorsun da, bu kadar uzatıyorsun ekstra variable oluşturup falan.
2. gün olduğunu ve yeni başladığını farzediyorum, o sebeple fena sayılmaz.
Yeni değil kendisi. C++'ta 2. günü sözde ama kendi iddialarınca kanıtı olan Lua ve C++ projeleri, sanal makineler yazıyordu sıfırdan, bkz;


Neyse döküldü gerçek hali işte ortaya.
 
C++ konsol halini öğreniyorum
Programlama bilen herkes, C++'ın, GUI için ve konsol için farklı syntax ve kurallara sahip olmadığını bilir. Yine sıvıyorsun. Yapma, lütfen yapma. Hatanı bir kere de kabul et. GUI yazarken if statement 'a' işini yapıyorda, konsol yazarken mi 'b' işini yapıyor? Yapma Allah aşkına.
 
Gün 1'de bıraktın diye biliyordum.

İf else yerine switch-case daha uygun olabilir bu senaryoda.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…