Arama butonu
Bu konudaki kullanıcılar: 1 misafir
7
Cevap
612
Tıklama
0
Öne Çıkarma
c kodunda hata nerede
L
15 yıl
Teğmen
Konu Sahibi

//sayi tahmin oyunu
#include<stdio.h>
#include<stdlib.h>
#include<time.h>


int main()
{
int tutulansayi=0;
int saniyeler=0;
int tahmin=0;
int kactahmin=0;
int puan=50;
//sayi tut

saniyeler=time(NULL);
srand(saniyeler);
tutulansayi=(rand()%100)+1;
printf("1 ile 100 arasinda rasgele bir sayi tuttum!\nkolaysa tahmin et\nsana bazi ipuclari verecegim");
while(tahmin!=-1)
tekrar:
printf("\ntahminin(1-100:");
scanf("%d",&tahmin);


if(tahmin<1 || tahmin>100)
{
printf("hile yapma 1 ile 100 arasi sayi gir");
goto tekrar;
}
kactahmin++;
if(tahmin==tutulansayi){//bildi
printf("tebrikler toplam %d seferde bildin!\n",kactahmin);
break;
}
else{
if(tahmin>tutulansayi){
printf("daha kucuk sayi girmelisin!\n");
puan-=5;
}
else{
printf("daha buyuk bir sayi girmelisin\n");
puan-=5;

}
}
}
bilemedin; printf("bilemediniz puaniniz sifir oldu sayi %d idi",srand(saniyeler);
printf("puanin 50 uzerinden %d!",puan<0?*:puan);
tekrar2:

getch();
}

arkdaşlar dev c ile derledğimde abuk subuk bi hara veriyo berak not loob felan diyo anlayamadım:)

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



A
15 yıl
Er

tam inceleyecek vakit bulamadım şöyle bir baktımda else ler yerine if kullanmayı dermisin bi.


Bu mesaja 1 cevap geldi.
L
15 yıl
Teğmen
Konu Sahibi

quote:

Orijinalden alıntı: atletico

tam inceleyecek vakit bulamadım şöyle bir baktımda else ler yerine if kullanmayı dermisin bi.

olmuyor:(


Bu mesaja 1 cevap geldi.
L
15 yıl
Teğmen
Konu Sahibi

//sayı tahmin oyunu 
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<conio.h>

int main()
{
int tutulansayi=0;
int tahmin=0;
int saniyeler=0;
int kactahmin=0;
int puan=50;
saniyeler=time(NULL);
srand(saniyeler);
tutulansayi=(rand()%100)+1;
printf("Tahminlere basliyoruz\n1-100 arasi deger tuttum bakalim bilebilecenmi?\n");
while(tahmin!=-1)
{


printf("lutfen 1-100 arasi deger giriniz:");
scanf("%d",&tahmin);
if(tahmin==-1) break;
if(tahmin<1 || tahmin>100){
printf("oyun bozanlik yapma\n1 ila 100 arasi deger gir!");
continue;
}
kactahmin++;
if(tahmin==tutulansayi)
{
printf("tebrikler!\n toplam %d seferde bildin\n",kactahmin);
break;
}else{
if(tahmin>tutulansayi)
{
printf("lutfen daha kucuk deger gir\n");
puan-=5;
}else{
printf("daha buyuk sayi gir\n");
puan-=5;
}
}
}
printf("puanin 50 uzerinden %d",puan<0 ? 0: puan);
getch();
}


böyle olunca oluyor sorun rand fonksiyonunu döngü içerisine yazmaktan kaynaklanıymuş...fakat neden böyle yapıyor anlamadım ne fark ederki?


Bu mesaja 1 cevap geldi.
S
15 yıl
Yüzbaşı

while(tahmin!=-1)
tekrar:
.....
.....
goto tekrar;

Sorun goto Detayı biraz karmaşık ama önemi yok. Zira asıl sorun o goto'nun kendisi. Goto'yu sözlüklerinizden, zihninizden filan çıkarıp, duyarsanız "Nedir o, turşusu mu oluyor?" sormadıkça bu iş yürümez.

Derleyici az bile şarlamış, ben olsam bilmem ne yapardım artık

Biz bu işi ilk öğrenirken, bir BASIC vardı, başka bir şey yoktu. Tamam bir şeyler vardı, 8086 PC'ler için, ama disketini filan nerden bulacaksın ki, COBOL'muş, C'ymiş vs. Hatta 8086 CPU, 64K RAM makineyi bulmak bile bir şeydi zaten. Ve Commodore'lar, ZX-81'ler vs. için defacto dil, assembler ve BASIC'ti. 8086'larda da elbette, meşhur GW-BASIC.. Hatta IBM'in INT 18H BASIC'i..

Ve o dillerde JMP ila GOTO bizim işimizi harika bir şekilde görürdü. Zaten başka bir şey yok ki, nerde while filan? Bu yüzden, itiraf edeyim, yapısal programlamaya intibakımız zor oldu. Hatta sırf bu yüzden PASCAL'ı hiç sevemedim.

Siz siz olun, goto'yu unutun. Ve ardından goto'yu bir daha unutun.


Bu mesaja 1 cevap geldi.
L
15 yıl
Teğmen
Konu Sahibi

quote:

Orijinalden alıntı: skoylu

while(tahmin!=-1)
tekrar:
.....
.....
goto tekrar;

Sorun goto Detayı biraz karmaşık ama önemi yok. Zira asıl sorun o goto'nun kendisi. Goto'yu sözlüklerinizden, zihninizden filan çıkarıp, duyarsanız "Nedir o, turşusu mu oluyor?" sormadıkça bu iş yürümez.

Derleyici az bile şarlamış, ben olsam bilmem ne yapardım artık

Biz bu işi ilk öğrenirken, bir BASIC vardı, başka bir şey yoktu. Tamam bir şeyler vardı, 8086 PC'ler için, ama disketini filan nerden bulacaksın ki, COBOL'muş, C'ymiş vs. Hatta 8086 CPU, 64K RAM makineyi bulmak bile bir şeydi zaten. Ve Commodore'lar, ZX-81'ler vs. için defacto dil, assembler ve BASIC'ti. 8086'larda da elbette, meşhur GW-BASIC.. Hatta IBM'in INT 18H BASIC'i..

Ve o dillerde JMP ila GOTO bizim işimizi harika bir şekilde görürdü. Zaten başka bir şey yok ki, nerde while filan? Bu yüzden, itiraf edeyim, yapısal programlamaya intibakımız zor oldu. Hatta sırf bu yüzden PASCAL'ı hiç sevemedim.

Siz siz olun, goto'yu unutun. Ve ardından goto'yu bir daha unutun.



2. mesajımda goto suz yaptım bi bakarmısn:)..mesajı okursan bişi yazdım bi zahmet ona göre cevap veririmisn teşekkülrer ilgilendiğin içn


Bu mesaja 1 cevap geldi.
S
15 yıl
Yüzbaşı

Gördüğüm kadarıyla, çalışmasını engelleyecek bir hata yok.

Fakat çalışıyor olmak, iyi olmak demek değil maalesef.

Mesela:

if (tahmin == -1) break;

Eğer hiç tahmin yapmadan çıkarsa, 50 puan alacaktır sanıyorum oyuncu. Skorboarda yazılmak için iyi bir yöntem

Ama asıl sorun, kullanıcın bundan haberdar olmaması. Paskalya yumurtası koymak gibi bir niyetiniz var olabilir, bilemiyorum, ama bu biraz basit kalır.

Bir diğer mesele ise, olmayacak işe bakalım. Eğer bu koda aynı rakamı belli defa girersek, kod acayip enteresan bir hale gelmezmi? Şöyle ki, her defasında -5, -5 derken, kactahmin değeri, -MAXINT olacak, ardından 0 ve "0 tahminde bildin" gibi abes bir durum ortaya çıkacak. Programcı, bu gibi durumları gören ve göz önüne alan kimsedir.

Daha başka bir mesele ise şu. O main() fonksiyonu için demişsiniz ki: int main();

Bu durumda bu fonksiyonun geriye bir değer döndürmesi gerekiyor. Ne değeri, ne olacak filan demeyin, derleyiciyi kızdırmamak, kafasını karıştırmamak, onu mutlu etmek gerekir. Derleyicinin mutluluğu ile programcının mutluluğu arasında kesin bir parallellik olacaktır her daim.

Bu gibi hususları görmeyi öğrenmeye çalışın, her durumu düşünün. Derleyiciyi mutlu etmeyi öğrenin. Bir kaç iyi kaide vardır bizim meslekte: KISS, "Keep compiler happy" gibi..


Bu mesaja 1 cevap geldi.
L
15 yıl
Teğmen
Konu Sahibi

quote:

Orijinalden alıntı: skoylu

Gördüğüm kadarıyla, çalışmasını engelleyecek bir hata yok.

Fakat çalışıyor olmak, iyi olmak demek değil maalesef.

Mesela:

if (tahmin == -1) break;

Eğer hiç tahmin yapmadan çıkarsa, 50 puan alacaktır sanıyorum oyuncu. Skorboarda yazılmak için iyi bir yöntem

Ama asıl sorun, kullanıcın bundan haberdar olmaması. Paskalya yumurtası koymak gibi bir niyetiniz var olabilir, bilemiyorum, ama bu biraz basit kalır.

Bir diğer mesele ise, olmayacak işe bakalım. Eğer bu koda aynı rakamı belli defa girersek, kod acayip enteresan bir hale gelmezmi? Şöyle ki, her defasında -5, -5 derken, kactahmin değeri, -MAXINT olacak, ardından 0 ve "0 tahminde bildin" gibi abes bir durum ortaya çıkacak. Programcı, bu gibi durumları gören ve göz önüne alan kimsedir.

Daha başka bir mesele ise şu. O main() fonksiyonu için demişsiniz ki: int main();

Bu durumda bu fonksiyonun geriye bir değer döndürmesi gerekiyor. Ne değeri, ne olacak filan demeyin, derleyiciyi kızdırmamak, kafasını karıştırmamak, onu mutlu etmek gerekir. Derleyicinin mutluluğu ile programcının mutluluğu arasında kesin bir parallellik olacaktır her daim.

Bu gibi hususları görmeyi öğrenmeye çalışın, her durumu düşünün. Derleyiciyi mutlu etmeyi öğrenin. Bir kaç iyi kaide vardır bizim meslekte: KISS, "Keep compiler happy" gibi..



peki teşekkür ederim :)



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.