İçeriğe geç
ShiftDelete.Net
Haber ara/ SDN'ye SorGiriş
Haber Akışı SDNTV İnceleme Forum Yapay Zeka Akıllı Telefon Elektrikli Otomobil Oyun ShiftDelete.Net Global Teknoloji Haberleri Mobil Otomobil Donanım Savunma Bilim Sosyal Medya İnternet Giyilebilir Teknoloji Rehber Ürünler Son dakika Yazarlar
  1. Ana sayfa
  2. Topluluk
  3. Programlama
  4. Programlama Dilleri
Programlama Dilleri

Nerede hata yapıyorum ?

prensesss22.12.201216 cevap1.820 görüntüleme
2012'den beri9 mesaj
#1
Arkadaşlar C de bir program yapmaya çalışıyorum.Kullanıcıdan 10 tane şehir ismi alacak.derleyici hata vermemesine rağmen çalıştırdığımda 4.şehre kadar alıyor.sonra hata verip kapanıyor.

işte kod :
#include <stdio.h>



main()
{
    char  *city[10];
    int i;
    
    /*Accept the city names*/
    for(i=0;i<10;i++)
    {
    printf("Please enter %d.city: ",i+1);
    
    
    scanf("%s",city[i]);
    
    
     
    }
    
    getchar();
}




Nerede hata yapıyor olabilirim ? Yardımlarınız için şimdiden teşekkürler arkadaşlar.
Cevaplar
2011'den beri3.263 mesaj
#2
scanf("%s",&city);

şeklinde "&" operatörü kullanırsan sorun düzelecektir.
prensesss Konuyu açan
2012'den beri9 mesaj
#3
düzeldi teşekkür ederim.ama bir sorum olacak .city bir adres ismi değil mi zaten.ben başta *city[10] yani 10 tane pointer dizisi tanımlamıştım.bu durumda pointerlar zaten bir adres olduğundan adres operatörü neden gerekiyor ?
2011'den beri597 mesaj
#4
ben bişey sormak istiyorum, bu benim şahsi sorum, öğrenci misiniz ?
prensesss Konuyu açan
2012'den beri9 mesaj
#5
evet neden ?
2011'den beri597 mesaj
#6
neden böyle bi programa ihtiyaç duydunuz diye sorucaktım, burada soru soranlarla ilgili genel bi profil oluşturmaya çalışıyorum kafamda da...

kaçıncı sınıf peki ?
eSa üstadım bunu anket haline getirsek mi ?
prensesss Konuyu açan
2012'den beri9 mesaj
#7
1.sınıfım. aslında ihtiyaçtan değil bu sadece programın bir parçası, sadece aklıma takılan yeri burada gelip sordum.amaç öğrenmekti ama cevap alsam bile açıklama bulamadım bu yüzden anketten önce bunu düşünün derim.sormakla bir çözüm elde edemiyoruz çünkü burada.
2011'den beri597 mesaj
#8
ben c++ programcısıyım, c karakter katarını yanlızca optimizasyon ve bir işaretçi amacıyla kullanıyorum...
özür dilerim böyle bodozlama daldım.
prensesss Konuyu açan
2012'den beri9 mesaj
#9
Önemli değil ama sorumun cevabı bu değil...
2011'den beri597 mesaj
#10
sorunun cevabı c karakter katarları hayatımda gördüğüm optimizasyonda bu kadar emeği olupda en ufak çıkardığı sorunda üzerine geliştirilen sınıflar tercih edilip göz ardı edilen tek veri tipi... :D

sorunuzu google da bulabilirsiniz, inanın şu an uzun uzağa bu konuya dalamicam ama sorun şurdaki siz işaretçi dizisi oluşturuyorsunuz oluşturduğunuz işaretçiler karakter katarı işaretçileri ve bellekte onlar için yer ayırmıyorsunuz... :D
prensesss Konuyu açan
2012'den beri9 mesaj
#11
Yer ayırmayınca & kullanılır gibi bir genelleme olduğunu düşünmüyorum.ayrıca normal bir integer tanımladığımız zamanda malloc ya da calloc ile yer ayırmıyoruz.
sorumu baştan soruyorum.
mesela bir dizi tanımladığımız zaman dizi zaten bir adrestir diyerek scanf de & işaretini kullanmıyorduk.burda da aynı şey geçerli.çünkü ben 10 tane dizi tanımlıyorum.cevap vermemekte ısrar edişinizi de anlamıyorum.amacınız bilgilendirmekse bilgilendirin.zaten değilse de söyleyin ben de ona göre zamanımı harcamayayım bu sitede.googla da bulabilsem zaten gelip böyle bir forum sitesinde sormazdım.
2009'den beri5.744 mesaj
#12
Aynı şekilde bizde ödev aldık üniversite öğrencisimisin.
prensesss Konuyu açan
2012'den beri9 mesaj
#13
evet yardımcı olabilir misin acaba ?
2010'den beri239 mesaj
#14
scanf("%s",&city); bu şekilde yaptığında da bence hatalı bir kullanım olabilir. Bu access violation'a sebep olur. char city[10][100]; bu şekilde tanımlayıp, & kullanmamak daha doğru olabilir.
prensesss Konuyu açan
2012'den beri9 mesaj
#15
access violation ne demek bilmiyorum ama evet ben de iki boyutlu bir diziyle öyle yapılabileceğini biliyorum.ama pointerla aynı şeyi nasıl yaparız dediğimde hocamız bu şekilde göstermişti ama çalışmadı.pointerla yapma şansımız yok mu iki boyutlu diziyle yapabildiğimiz şeyi ?
2010'den beri239 mesaj
#16
Bu şekilde yaptığında program safe olmayacak, çalışıyor gibi görünse de aslında random olarak access violation verebilir. Burada pointer kullanmak çok mantıklı olmayacaktır. En hızlı yöntem dediğim gibi yapmak ama şöyle bir ipucu da verebilirim:

char *a = (char*) malloc(100); free( a ); ile char a[100]; aynı şeydir. Sadece free yaptığın satırı kendin belirlemen gerekiyor. Arrayda bu işlem otomatik yapılır.

Allocate edilmemiş bir belleğe erişmek istediğinde acces violation oluyor yani erişim ihlali :)
prensesss Konuyu açan
2012'den beri9 mesaj
#17
hmm anladım sanırım...çok teşekkür ederim aydınlattığınız için :)

Cevabını yaz

Cevap yazmak için giriş yap ya da üye ol. Eski forum kullanıcı adın ve parolanla girebilirsin.