- 24 Haz 2010
- 103
- 0
Adam asmaca oyunu yapıyorum fakat hata alıyorum.
1.Hata:2 defa bu kodu printf("%s\n",x); çalıştırıyor.
Ben bu hata çözümü için system("cls"); kullandım.
2.Hata:adam fonksiyonunun çalışması için gereken değişken j = 0 olarak kalıyor.
normalde j nin artması m ye bağlı fakat olmuyor.
Programı açıklama satırlarıyla birlikte yazdım.
Yardımlarınız için şimdiden teşekkürler..
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
v0id adam(int p){ //Asılan adamı çizen fonksiyon
if(p==1){ //P değeri 1 olduğunda ekran çıktısı (kafa)
printf("*****\n");
printf("* *\n");
printf("* *\n");
printf("*****\n");
}
if(p==2){ //P değeri 2 olduğunda ekran çıktısı (boyun)
printf("*****\n");
printf("* *\n");
printf("* *\n");
printf("*****\n");
printf(" |\n");
printf(" |\n");
}
}
int main(){
char sehirler[10][30]={"antalya","edirne","izmir","istanbul","bursa","trabzon","erzurum","samsun","mersin","bitlis"}; //Şehir isimlerini içeren sehirler dizisi
srand(time(NULL)); //zaman'a bağlı rasgele sayı üreten fonksiyonun çalışması için gerekli olan kod
int a,j=0,m; //a değişkeni rasgele sayı için oluşturuldu. //j değişkeni çizim fonksiyonun içine girecek olan değişken //m aşağodaki döngüde j değerinin artıp artmamasına karar verilmesini sağlayan değişken
a = rand()%10; //a değişkenine 0 ile 9 arasında rasgele bir sayı atandı.[0,9] //0 ve 9 dahil
int i; //for döngüleri için kullanılacak sayaç değişkeni
char x[strlen(sehirler[a])]; //rasgele gelen şehrin uzunluğu boyutunda char tipinde bir x değişkeni oluşturuluyor.
for(i=0;i<strlen(sehirler[a]);i++) //oluşturulan x değişkeninin tüm indislerine * işareti atanıyor ve bu işlem rasgele gelen şehrin uzunluğu boyunca yapılıyor.
x='*';
char harf; //kullanıcıdan alınacak harf için değişken tanımlanıyor.
while(strcmp(x,sehirler[a])!=0){ //strcmp fonksiyonuyla x'i ve rasgele gelen şehrin indislerini karşılaştırıyor hepsi aynı ise 0 değerini döndürüyor koşulumuzda 0 dan farklı olduğu sürece çalış.
m=0; //j değişkeninin artıp artmayacağına karar verilmesi için öncelikle m değişkenine 0 değeri atanıyor.
adam(j); //çizim fonksiyonu çağırılıyor j'nin ilk değeri 0 yani başlangıta hiçbir şey olmayacak.
printf("%s\n",x); //ekrana x karakter dizisini bas ve alt satıra geç.
scanf("%c",&harf); //kullanıcıdan harf değişkenine değer al.
for(i=0;i<strlen(sehirler[a]);i++){ //kullanıcının girdiği harfi rasgele gelen şehir karakter dizisinde ara döngüsü
if(sehirler[a]==harf){ //girilen karakter rasgele gelen şehir karakter dizisinin i.indisi ile eşleşiyor ise bu harfi x'in i.indisine ata.
x=harf; //harf'i x'in i.indisine ata.
m=1; //harf ataması gerçekleşirse m=1 yap.
}
}
if(m=0) //eğer m=0 ise j değişkenin değerini arttır. (j'nin ilk değeri 0)
j++;
system("cls"); //ekranı temizleme kodu //bu kodu printf 2 kere çalıştığı için yazmak zorunda kaldım kaldırın ve sıkıntıyı görün.
}
printf("%s\nTebrikler..",x); //döngü sonlandığında ekrana şehrin adını yaz ve tebrik et
}
1.Hata:2 defa bu kodu printf("%s\n",x); çalıştırıyor.
Ben bu hata çözümü için system("cls"); kullandım.
2.Hata:adam fonksiyonunun çalışması için gereken değişken j = 0 olarak kalıyor.
normalde j nin artması m ye bağlı fakat olmuyor.
Programı açıklama satırlarıyla birlikte yazdım.
Yardımlarınız için şimdiden teşekkürler..
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
v0id adam(int p){ //Asılan adamı çizen fonksiyon
if(p==1){ //P değeri 1 olduğunda ekran çıktısı (kafa)
printf("*****\n");
printf("* *\n");
printf("* *\n");
printf("*****\n");
}
if(p==2){ //P değeri 2 olduğunda ekran çıktısı (boyun)
printf("*****\n");
printf("* *\n");
printf("* *\n");
printf("*****\n");
printf(" |\n");
printf(" |\n");
}
}
int main(){
char sehirler[10][30]={"antalya","edirne","izmir","istanbul","bursa","trabzon","erzurum","samsun","mersin","bitlis"}; //Şehir isimlerini içeren sehirler dizisi
srand(time(NULL)); //zaman'a bağlı rasgele sayı üreten fonksiyonun çalışması için gerekli olan kod
int a,j=0,m; //a değişkeni rasgele sayı için oluşturuldu. //j değişkeni çizim fonksiyonun içine girecek olan değişken //m aşağodaki döngüde j değerinin artıp artmamasına karar verilmesini sağlayan değişken
a = rand()%10; //a değişkenine 0 ile 9 arasında rasgele bir sayı atandı.[0,9] //0 ve 9 dahil
int i; //for döngüleri için kullanılacak sayaç değişkeni
char x[strlen(sehirler[a])]; //rasgele gelen şehrin uzunluğu boyutunda char tipinde bir x değişkeni oluşturuluyor.
for(i=0;i<strlen(sehirler[a]);i++) //oluşturulan x değişkeninin tüm indislerine * işareti atanıyor ve bu işlem rasgele gelen şehrin uzunluğu boyunca yapılıyor.
x='*';
char harf; //kullanıcıdan alınacak harf için değişken tanımlanıyor.
while(strcmp(x,sehirler[a])!=0){ //strcmp fonksiyonuyla x'i ve rasgele gelen şehrin indislerini karşılaştırıyor hepsi aynı ise 0 değerini döndürüyor koşulumuzda 0 dan farklı olduğu sürece çalış.
m=0; //j değişkeninin artıp artmayacağına karar verilmesi için öncelikle m değişkenine 0 değeri atanıyor.
adam(j); //çizim fonksiyonu çağırılıyor j'nin ilk değeri 0 yani başlangıta hiçbir şey olmayacak.
printf("%s\n",x); //ekrana x karakter dizisini bas ve alt satıra geç.
scanf("%c",&harf); //kullanıcıdan harf değişkenine değer al.
for(i=0;i<strlen(sehirler[a]);i++){ //kullanıcının girdiği harfi rasgele gelen şehir karakter dizisinde ara döngüsü
if(sehirler[a]==harf){ //girilen karakter rasgele gelen şehir karakter dizisinin i.indisi ile eşleşiyor ise bu harfi x'in i.indisine ata.
x=harf; //harf'i x'in i.indisine ata.
m=1; //harf ataması gerçekleşirse m=1 yap.
}
}
if(m=0) //eğer m=0 ise j değişkenin değerini arttır. (j'nin ilk değeri 0)
j++;
system("cls"); //ekranı temizleme kodu //bu kodu printf 2 kere çalıştığı için yazmak zorunda kaldım kaldırın ve sıkıntıyı görün.
}
printf("%s\nTebrikler..",x); //döngü sonlandığında ekrana şehrin adını yaz ve tebrik et
}
Moderatör tarafında düzenlendi: