Çözüldü C++ program fonksiyonu çağırdığında takılıyor

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

mtnbkts

Centipat
Katılım
3 Haziran 2020
Mesajlar
2
C++ öğrenmeye yeni başladım. Bir vektördeki sayıları tekrarlar kaldırılacak şekilde başka bir vektöre kaydedecek bir fonksiyon yazmaya çalıştım, ancak program konsolda çalıştırıldığında bu fonksiyonun çağırıldığı ilk yerde takılıyor. Hiçbir hata penceresi açılmıyor, sadece program orada devam etmeyi bırakıyor. Yazdığım fonksiyon şu şekilde:

C++:
std::vector<double> tekrarsiz(std::vector<double> girdiler) {
std::vector<double> result;
std::vector<int> tttt; //ayni degere sahip vector elemanlarini tekrar incelememesi icin kullandigim vector
bool con = false;
for (int i = 0; i < girdiler.size(); i++) {
for (int x = 0; x < tttt.size(); x++)
if (i = tttt[x])
con = true;
if (con) {
con = false;
continue;
}
for (int j = 0; j < girdiler.size(); j++)
if (girdiler[I] == girdiler[j])
tttt.push_back(j);
result.push_back(girdiler[I]);
}
return result;
}
[/I][/I]
 
Son düzenleyen: Moderatör:
Çözüm
C++ öğrenmeye yeni başladım. Bir vektördeki sayıları tekrarlar kaldırılacak şekilde başka bir vektöre kaydedecek bir fonksiyon yazmaya çalıştım, ancak program konsolda çalıştırıldığında bu fonksiyonun çağırıldığı ilk yerde takılıyor. Hiçbir hata penceresi açılmıyor, sadece program orada devam etmeyi bırakıyor. Yazdığım fonksiyon şu şekilde:

C++:
std::vector<double> tekrarsiz(std::vector<double> girdiler) {
std::vector<double> result;
std::vector<int> tttt; //ayni degere sahip vector elemanlarini tekrar incelememesi icin kullandigim vector
bool con = false;
for (int i = 0; i < girdiler.size(); i++) {
for (int x = 0; x < tttt.size(); x++)
if (i = tttt[x])
con = true;
if (con) {
con = false;
continue;
}
for (int j = 0; j < girdiler.size(); j++)
if (girdiler[I] == girdiler[j])
tttt.push_back(j);
result.push_back(girdiler[I]);
}
return result;
}
Burada tanımladığın fonksiyonu 'main' fonksiyonunda çağırıyor musun?

C++:
for (int j = 0; j < girdiler.size(); j++)
if (girdiler[I] == girdiler[j])
tttt.push_back(j);
result.push_back(girdiler[I]);

Burada parantezleri tam olarak belirtebilir misin? ve 'I' değişkeni ile 'i' değişkeninin farkı var.
C++:
if (i = tttt[x])
con = true;
Bu if sürekli çalışır çünkü değişken atıyorsun sorgu yok burada. Ve i indexine tttt[x] değişkenini atıyorsun.
Visual studio üzerinde debugger ile adım adın gidin. Nerede tıkanıyorsa oradaki döngüyü sonlandırma şartını kontrol edin. Sonsuz döngüde bırakmış olabilirsiniz.
 
Döngüyü "i" ile başlatmışsın ama index istersen "I" ile istemişsin. Bunun dışıdna fonksiyonu çağırdığın kısmı da paylaşırsan kontrol etmek daha da kolaylaşır.
Kısır döngü var. For içinde con değerini true yapıyorsun. Sonra false yapıp continue diyorsun. Sonra aynı yere gelince yine baştan aşağı kontrol ediyor. Yine bulup continue diyor...
Çözüm ise o for'da x = 0 yerine x = i yazman sanırım. Kodun ne yaptığını hala tam anlayamadığım için kesin konuşamıyorum.
Tekrar bulunan bir vector yollayıp tekrar olmayan bir vector aldım bu şekilde. Amaç da bu sanırım.
 
Son düzenleme:
C++ öğrenmeye yeni başladım. Bir vektördeki sayıları tekrarlar kaldırılacak şekilde başka bir vektöre kaydedecek bir fonksiyon yazmaya çalıştım, ancak program konsolda çalıştırıldığında bu fonksiyonun çağırıldığı ilk yerde takılıyor. Hiçbir hata penceresi açılmıyor, sadece program orada devam etmeyi bırakıyor. Yazdığım fonksiyon şu şekilde:

C++:
std::vector<double> tekrarsiz(std::vector<double> girdiler) {
std::vector<double> result;
std::vector<int> tttt; //ayni degere sahip vector elemanlarini tekrar incelememesi icin kullandigim vector
bool con = false;
for (int i = 0; i < girdiler.size(); i++) {
for (int x = 0; x < tttt.size(); x++)
if (i = tttt[x])
con = true;
if (con) {
con = false;
continue;
}
for (int j = 0; j < girdiler.size(); j++)
if (girdiler[I] == girdiler[j])
tttt.push_back(j);
result.push_back(girdiler[I]);
}
return result;
}
Burada tanımladığın fonksiyonu 'main' fonksiyonunda çağırıyor musun?

C++:
for (int j = 0; j < girdiler.size(); j++)
if (girdiler[I] == girdiler[j])
tttt.push_back(j);
result.push_back(girdiler[I]);

Burada parantezleri tam olarak belirtebilir misin? ve 'I' değişkeni ile 'i' değişkeninin farkı var.
C++:
if (i = tttt[x])
con = true;
Bu if sürekli çalışır çünkü değişken atıyorsun sorgu yok burada. Ve i indexine tttt[x] değişkenini atıyorsun.
 
Çözüm
Bu if sürekli çalışır çünkü değişken atıyorsun sorgu yok burada. Ve i indexine tttt[x] değişkenini atıyorsun.
Bunu fark etmemiştim. Verdiğim rastgele vector için doğru çalışsa da başka rastgeleler için çalışmadı.
Kodu kopyalayıp yapıştırınca Visual Studio result.push_back(girdiler); satırını döngü dışında aldı. Zaten küme parantezi kullanmadığı için diğer türlüsü mümkün değil. En azından program o şekilde yapmaz.
 
Hepinize teşekkür ederim,
Bu if sürekli çalışır çünkü değişken atıyorsun sorgu yok burada. Ve i indexine tttt[x] değişkenini atıyorsun
haklısınız tek hata orada zaten, o kadar bakıp böyle basit hatayı fark edememişim. i/I olayı aslında yok tabii ayrıca, moderatör düzenleme yaparken falan yanlışlıkla yapmış olabilir.
 

Geri
Yukarı