Arkadaşlar amacım C dilinde 1-99 arası sayılardan haneleri toplamı tek olan sayıları bulup ekrana yazdırmak. Denemek için skalayı daraltıp kod içinde 99 yerine 5 yazdım. Lakin şöyle bir sorun var benim kafamdaki mantıkta gayet güzel çalıştığını düşündüğüm bu kod sonsuz döngüye giriyor. Ne yapacağımı bulamadım. Sizce bunu nasıl düzeltirim?
Beklediğim çıktı (99 yerine 5 düşünün): "Haneleri toplami tek: 1 Haneleri toplami tek: 3"
Edit: Neden sonsuz döngüye giriyor?
Öğrendiklerimi benim gibi yeni yeni bu işlere başlayan arkadaşlar için aktarmak istiyorum. Aşağıda @Vavien. 'in yaptığı çözüme bakabilirsiniz. Peki çözümde olup benim kodlarda olmayan ne?
Şimdi ben i adlı değişken ile for döngüsü oluşturuyorum ve aşağıda while döngüsüne'de i ile giriyorum. While döngüsü içinde i=0 oluyor ve diğer koşula geçiyor. Lakin for döngüsü i'yi artırırken son değeri üzerinden gidiyor. Yani son i=0 olduğundan 1 artırıp i=1 yapıyor. Bu durumda aslında en başa dönmüş oluyoruz. Çünkü for döngüm zaten i=1'den başlamıştı. Bu böyle sonsuz kere tekrar ediyor. Bunu önlemek için i değişkenimi başka bir değişkene atıyoruz ve while döngüsüne o değişken ile giriyoruz. -ki i değerimiz değişmesin. Ve düzenli şekilde artabilsin.
int main()
{
int n, m, toplam, temp;
for(int i=1; i<5; i++){
temp = i;
while(i>0){
m = i%10;
toplam += m;
i = i/10;
}
if (toplam %2!=0){
printf("Haneleri toplami tek: %d", temp);
}
}
}
#include <stdio.h>
int main() {
int cur = 0;
int sum = 0;
for (int i = 1; i < 100; ++i) {
cur = i;
while (cur > 0) {
sum += cur % 10;
cur /= 10;
}
if (sum % 2) {
printf("Tek: %d\n", i);
}
sum = 0;
}
return 0;
}
For döngüsü i < 5 şartı sağlanmayana kadar çalışıyor. Kendisi bir sefer bitince i'nin değerini bir artırıyor.
Ama while döngüsü gidiyor i = 0 olana kadar çalışıyor. Bu da for döngüsünün son satırında her zaman i = 0 durumu olduğu anlamına gelir. For döngüsü diğer turuna başlarken i'yi artırıp 1 yapıyor, sonra tekrar while'a girip 0 oluyor.
while yerine if kullanırsanız döngü doğru çalışacaktır.
Çünkü while döngüsüne i 0'dan büyükse çalış diyorsunuz. For içinde tanımladığınız i 0'dan büyük olduğu an while döngüsü hiç durmadan çalışıyor ve for tamamlanamıyor.
For döngüsü i < 5 şartı sağlanmayana kadar çalışıyor. Kendisi bir sefer bitince i'nin değerini bir artırıyor.
Ama while döngüsü gidiyor i = 0 olana kadar çalışıyor. Bu da for döngüsünün son satırında her zaman i = 0 durumu olduğu anlamına gelir. For döngüsü diğer turuna başlarken i'yi artırıp 1 yapıyor, sonra tekrar while'a girip 0 oluyor.
Yanlış düşünmüşsünüz veya dediğimi anlamamışsınız. i sadece sıfır ve bir değerlerini alıyor. Siz gelmiş 5 diyorsunuz. Bu, zıplayarak aya ulaştığınızda sizi dünyanın kralı yapacağım dememle aynı şey. Hiç gerçekleşmeyecek bir koşula vaatte bulunmak.
Döngü içindeki işlemleri i ile değilde başka bir variable ile yapın. Yani while ve while içindeki i'leri temp ile değiştirin, en sonda print ederken temp yerine i print edin.
Yanlış düşünmüşsünüz veya dediğimi anlamamışsınız. i sadece sıfır ve bir değerlerini alıyor. Siz gelmiş 5 diyorsunuz. Bu, zıplayarak aya ulaştığınızda sizi dünyanın kralı yapacağım dememle aynı şey. Hiç gerçekleşmeyecek bir koşula vaatte bulunmak.
Şimdi ben nasıl düşündüğümü söyleyim:
for döngüsü 5'e kadar i değerini 1'er 1'er artıracak, i=1 ile döngüye giriyorum while döngüsüne de giriyorum ve while döngüsü için de i=0 oluyor. Dolayısıyla while döngüsünden çıkıp diğer satıra geçer. Koşulu sağlıyorsa içine girer sağlamıyorsa i değerini artırır. Eğer burada yanlış bir düşüncem varsa söyleyin. Kodlama da çok yeniyim.
Ve işin özüne inersek bu problemi nasıl çözebileceğimi anlatırsanız ona da çok sevinirim.