Önemliiii---C prog. dili

kingneu
18-04-2008, 23:30   |  #1  
OP Taze Üye
Teşekkür Sayısı: 0
3 mesaj
Kayıt Tarihi:Kayıt: Nis 2008

önemliiii
benim bi sorum olacak arkadaşlar...

aşağıdaki kod da;

#include <stdlib.h>
#include <stdio.h>

int main()
{
int a[10],i;

for(i=0;i<10;i++)
{printf("a[%d] : ",i);
scanf("%d",&a);}

for(i=0;i<10;i++)
printf("a[%d] : %d\n",i,a);


system("pause");

return 0;

}

bu kodlar düzenlenip çalıştırıldığında a[0]=a dendiğinde,dizinin diğer elemanlarına giriş yapılamıyor ve dizi elemanlarına değer ataması bilgisayar tarafından yapılıyor...

bunun sebebi nedir?Ayrıca kullanıcıya bi hata mesajı nasıl verebilirim,örneğin "karakter girişi yapıldı,sayı girişi yapınız" gibi ve dizi ile işleme nasıl devam edebilirim?


şimdiden teşekkürler...

umarım bi cevap gelir çünkü çok merak ettim ve araştırıyorum bende...

Son Düzenleme: kingneu ~ 19 Nisan 2008 00:15
Alibaba
18-04-2008, 23:55   |  #2  
Yıllanmış Üye
Teşekkür Sayısı: 0
427 mesaj
Kayıt Tarihi:Kayıt: Mar 2007

c ile uğraşan birinin daha anlamlı cümlelerle konuşması gerekir. bir insanın konuşma ve davranışları ne derece tutarlı ve açıksa, yaptığı işler de o derece kalitelidir. diziyi ne şekilde tarıyorsun, kodunu da gösterseydin bi zahmet. bir fonksiyon hata verip kesildiğinde output parametrelerine neden atama yapsın? vay efendim ben 3 tanesini doğru okudum onlara bari yükleme yapayım der mi?

kingneu
19-04-2008, 00:09   |  #3  
OP Taze Üye
Teşekkür Sayısı: 0
3 mesaj
Kayıt Tarihi:Kayıt: Nis 2008

Afedersiniz ama kişiliğimle ilgili daha doğrusu bilmediğiniz ve tanımadığınız bi kişi hakkında bu kadar yorum yapma hakkını size kim veriyor? Sadece konu anlaşılmadı bununla birlikte kodu istersiniz ki yeterince kibar olur sanırım.. ne profesyonel olarak c ile uğraşan biriyim ki işlerim kaliteli olsun,ne de bir edebiyat hocası.. eğer bir iş yapıyorsam da bunun ne derece kaliteli olduğu sizi ilgilendirmez.. cevap için teşekkür ederim yine de...

Alibaba
19-04-2008, 00:40   |  #4  
Yıllanmış Üye
Teşekkür Sayısı: 0
427 mesaj
Kayıt Tarihi:Kayıt: Mar 2007

kendini ve sorunlarını düzgün ifade etmek için edebiyat hocası olman gerekmez. ben sana sorununu şiirle göster demiyorum ki. görmediğim kodun kalitesini de eleştirmiyorum.
söylediğim şey de nezaketsizlik değil, yapıcı bir uyarıdır. hem diline hem de mesleğine saygısı olan birinin göstereceği duyarlılığı gösterdim. madem amatörce uğraşıyorsun ve kişilikli birisin, sen de benim gibi bu işlerden emekli olacak yaşa gelmiş birinin tavsiyesine saygı duy. sana yardım edebilmek amacıyla mesajını 3-4 defa okumak zorunda kaldım ama yine de emin olamadım.
kodunu gösterince, ne demek istediğin anlaşılmasa bile ne yaptığını görüp yardım eden olur.

önceki tavsiyemi bu konulara meraklı kişiler için yineliyorum: programlama dilleri birer komut dizisi değildir, mantık hiyerarşisidir. yani düşüncenin algoritmalarıdır. sadece sağlıklı bir algoritmik düşünce ve davranışa sahip insanlar sağlıklı programlar yazarlar.
yine de dikkate alıp almamak size kalmış bir davranış.

kingneu
Afedersiniz ama kişiliğimle ilgili daha doğrusu bilmediğiniz ve tanımadığınız bi kişi hakkında bu kadar yorum yapma hakkını size kim veriyor? Sadece konu anlaşılmadı bununla birlikte kodu istersiniz ki yeterince kibar olur sanırım.. ne profesyonel olarak c ile uğraşan biriyim ki işlerim kaliteli olsun,ne de bir edebiyat hocası.. eğer bir iş yapıyorsam da bunun ne derece kaliteli olduğu sizi ilgilendirmez.. cevap için teşekkür ederim yine de...
_Neo_
21-04-2008, 01:56   |  #5  
_Neo_ avatarı
Yıllanmış Üye
Teşekkür Sayısı: 0
806 mesaj
Kayıt Tarihi:Kayıt: Haz 2007

Arkadasım ilk önce senin yaptığın bu program 10 yere sahip bir array(dizi)'ye

10 tane sayı koymak ve daha sonra on tanesını basmak,sen  başta bir hata yapmışsın array yani diziye sayı girmeden once  ekrana bastır dediğinden senin bilgisayar almış hafızadan saçma bir sayı (çoğunlukla - eksili olur) basmış  !Ayrıca kullanıcıya yanlış girdiniz sayı girin hatasını switch/case ile default kullanarak yapılır! Ayrıca bu gibi  programlarda zaten başta sayı gir dersin büyük bir program değil.

Dogru code:
#include <stdlib.h>
#include <stdio.h>

int main()
{
        int a[10],i;
        for(i=0;i<10;i++){
                printf("Herhangi bir sayi girin");
                printf("\n");
                scanf("%d",&a);
        }
        for(i=0;i<10;i++)
                printf("a[%d] : %d\n",i,a);
        system("PAUSE");
        return 0;
}
Dev C++ kullanmışsın system("pause"); değil system("PAUSE"); olmalı ayrıca bu programda tek kütüphane kullanılır giriş çıkış(ınput/output) (stdio.h). "stdlib.h" gerekmez.Dev C++ hazır bulundurur:)Birde kodları doğru titiz yazmaya bak!Programcı için doğru yazımda önemlidir!

Düzenleme: Cevap 2:D
Dün gece biraz kafa güzel bakmışım yıne konuna baktım orda a[0]=a dediğin ne acaba sen ne yapmak istiyorsun onu söyle bana:)kodda bir sorun yok herşeyi yapıyor eğer ki a[0]=1 olduğunda gerisini yazmak istiyorsan for döngüsünü i=1 ile başlatıcaksın int a[10]={1} diyerek tanıtırsan a[0]=1 gerisi(a[1],a[2]...) "0" olur ve gerisine yazdıgım for(i=1;i<10;i++) dongusuyle diğer dizileri doldurabilirsin(sıfır olanlar).

Son Düzenleme: _Neo_ ~ 21 Nisan 2008 22:38
sakin_insan
21-04-2008, 20:16   |  #6  
Yıllanmış Üye
Teşekkür Sayısı: 0
508 mesaj
Kayıt Tarihi:Kayıt: Oca 2007

burada ekrandan değer alırken a[0]=a dersen hata vermesi doğal çünkü diziyi tamsayı dizisi olarak tanımlamışsınız sonra bir karakter girmişsiniz.

(burada tam emin değilim ama a yi dizi göstericisi olarak da kabul edip rasgele sayılar üretmiş ve diziye yerleştirmiş olabilir.)


Eğer örneğin "karakter girişi yapıldı,sayı girişi yapınız" gibi bi hata mesajı vermek istiyosanız biraz daha kod yazmalısınız. bunun için isalnum isdigit, isalpha gibi fonksiyonları kullanabilirsiniz.

_Neo_
21-04-2008, 22:49   |  #7  
_Neo_ avatarı
Yıllanmış Üye
Teşekkür Sayısı: 0
806 mesaj
Kayıt Tarihi:Kayıt: Haz 2007

sakin haklı karakter girmişsin ayrıca karakteri nasıl girdin boyle mi?
#include <stdlib.h>
#include <stdio.h>

int main()
{
int a[10],i;
a[0]='a';\* dizinin başlangına karakter ataması*/

for(i=0;i<10;i++)
{printf("a[%d] : ",i);
scanf("%d",&a);}

for(i=0;i<10;i++)
printf("a[%d] : %d\n",i,a);


System("PAUSE");

return 0;

}

bu şekilde herhangi birşey olmaz dizinin zaten  baslangıcından baslıyosun a[0] yerine  verdiğin sayıyı koyar eğer ki a[1] den başlıcaksan for  döngüsünde i=1 olmalı oluncada a[0]=a'ya bilgisayarda kucuk a harfi için  tanımlanmıs decimal rakamı "97"'yi koyar:) eğer karakter ataması a[0]=a ise program hata verir;)
hata(error):

--------------------Configuration: Cpp1 - Win32 Debug--------------------
Compiling...
Cpp1.cpp
C:\Documents and Settings\Admin\Desktop\Cpp1.cpp(7) : error C2440: '=' : cannot convert from 'int [10]' to 'int'
        This conversion requires a reinterpret_cast, a C-style cast or function-style cast
Error executing cl.exe.

Cpp1.obj - 1 error(s), 0 warning(s)


Visual'da test ettim!

Son Düzenleme: _Neo_ ~ 21 Nisan 2008 22:54
kingneu
22-04-2008, 22:49   |  #8  
OP Taze Üye
Teşekkür Sayısı: 0
3 mesaj
Kayıt Tarihi:Kayıt: Nis 2008

sakin_insan verdiğin bilgiler için teşekkür ederim.. söylediğin fonksiyonlar işime yaradı.. Tekrar teşekkür ederimm..

bu arada _neo_ sana da birşey diyeceğim system("pause") da yazsan system("PAUSE") da yazsan o çalşır ayrıca bu fonksiyonda stdlib.h dan çalışır.. bilgine...

_Neo_
23-04-2008, 14:13   |  #9  
_Neo_ avatarı
Yıllanmış Üye
Teşekkür Sayısı: 0
806 mesaj
Kayıt Tarihi:Kayıt: Haz 2007

#include <stdio.h>

int main()
{
int a[10],i;
for(i=0;i<10;i++){
printf("Herhangi bir sayi girin");
printf("\n");
scanf("%d",&a);
}
for(i=0;i<10;i++)
printf("a[%d] : %d\n",i,a);

return 0;
}
benim dediğim bu usteki kod için stdlib.h koymana gerek yok dedim bize hiç bir zaman stdlib.h kullanmak zorundasın diye bir şey söylenmedi,hatta  kullandığım kitaptada dahil bunaEmin değil(Harvey deitel C and C++)Beğendim

Son Düzenleme: _Neo_ ~ 23 Nisan 2008 14:48