For döngüsüne rağmen sayaç artmıyor

int a,sayac,N,sonuc;
printf(“N degerini giriniz: “);
scanf(”%d”, &N);

sayac=0;
for(a=1;a<=N;a++);
{
sayac=sayac+1;
sonuc=a*sayac;
}
printf("%d\n", sonuc);

arkadaşlar sayac artmıyor hep 1 de kalıyor neden olabilir?

Merhaba, bir yerde noktalı virgül fazlalığınız var :ğ Noktalı virgülün dildeki işlevini de biliyorsanız fazlalığı tespit ettikten sonra programın neden istenmeyeni verdiğini de çözersiniz diye düşünüyorum.

(Bir de kodlarınızı şurada anlatılan şekilde veya şurada belirtilen yolla paylaşmanızı rica ederim bir daha paylaşmak istediğinizde.)

4 Beğeni

for döngüsü oluştururken noktalı virgül koyulmaz.
Döngü içerisinde yer almasını istediğiniz kodları süslü parantez içerisine almanız gerekiyor.

int a,sayac,N,sonuc;
printf("N degerini giriniz: ");
scanf("%d", &N);

sayac=0;
for(a=1;a<=N;a++)
{
    sayac=sayac+1;
    sonuc=a*sayac;
}
printf("%d\n", sonuc);
1 Beğeni

Neden? :d

2 Beğeni

Eğer içine bir şeyler yazmak istiyorsan for döngüsünde ; kullanamassın. birkaç kod örneği ile bunu açıklayabiliriz:

#include <stdio.h>

int main()
{
    for (int i=0;i<=5;i++)
    {
        printf("%d\n", i);
    }
    return 0;
}

bu kod örneği şu sonucu veriyor:

0
1
2
3
4
5

ama aynı kodu şöyle kullanırsak:

#include <stdio.h>

int main()
{
    for (i;i<=5;i++);
    {
        printf("%d\n", i);
    }
    return 0;
}

şu hatayı alıyoruz:

main.c:15:24: error: ‘i’ undeclared (first use in this function)
   15 |         printf("%d\n", i);
      |                        ^
main.c:15:24: note: each undeclared identifier is reported only once for each function it appears in

Ama bu illaki ; olmadan kullanmamız gerektiği anlamına da gelmez. Eğer istersek şu tarz bir şey de yapabiliriz:

#include <stdio.h>

int main()
{
    int i = 0;
    for (i;i<=5;i++);
    printf("%d\n", i);
    return 0;
}

burada da 6 sonucunu verdi.

Yani Gok_Mavisi_Anka nın da Then_Shiffman in de dedikleri doğru ama kod yazarken şu tarz hatalar oluşmasın diye burada anlatmak istedim.

Not: bahsettiğim şu tarz hatalar:

#include <stdio.h>

int main()
{
    for (i;i<=5;i++);
    {
        printf("%d\n", i);
    }
    return 0;
}

çünkü yukarıda da anlattığım gibi bu kod hata verecektir, bu tarz hataların if, while gibi yerlerde de çok yapıldığını gördüm bunu anlatmamın bir sebebi de bu.

Yok, orada bir artırma gerçekleşmiyor; derleme hatası alıyorsunuz i’nin deklare edilmeden kullanılmaya çalışılmasından dolayı ve herhangi bir kod yürümüyor.

Genel olarak ne demek istediğinizi anlayamadım…

1 Beğeni

Doğru söylüyorsunuz orada ufak bir hata var. Anlatmak istediğim şey ; varken de yokken de kullanılabileceği ama yanlış kullanılınca hata veriyor. (Yazının sonunda belirttiğim gibi bu tarz hatalarla çok karşılaştım o yüzden yazmak istedim.)

Edit: yanlış kısmı sildim.

Oradaki aldığınız hata noktalı virgül eksikliği/fazlalığından değil, i’yi deklare etmeyişinizden kaynaklanıyor ama?

pardon şöyle yazmışım

#include <stdio.h>

int main()
{
    for (i;i<=5;i++);
    {
        printf("%d\n", i);
    }
    return 0;
}

ama şöyle deneyince de hata aldım

#include <stdio.h>

int main()
{
    for (i=0;i<=5;i++);
    {
        printf("%d\n", i);
    }
    return 0;
}

Evet, çünkü kullanılmaya çalışan i değişkeninin tipini belirtmiyorsunuz (size_t gibi). Noktalı virgülün bir etkisi yok…

int olarak belirleyip tekrar denedim değişen bir şey olmadı (ben kodu internetten yazıp çalıştırıyorum belkide kullandığımız derleyicilerin arasında ki farkta sebep oluyor olabilir)

for'un içerisinde deklare ettiyseniz doğrudur, dışarıda ettiyseniz hata vermeden çalışıyordur ama istenilen sonucu vermiyor ki bu konudaki ilk sorunun sebebi de buydu evet.

dışarıda deklare edince hatasız çalışıyor ama bu seferde for i yi arttırmıyor

Ama 6 yazdırılıyor ekrana?

dışarıda i yi 0 olarak tanımlamıştım 0 ı yazdırdı sanırım for u atlıyor