http://www.gidnetwork.com/b-59.html , alan,; yapmışsın , hali icin alan girdikten sonra entera basınca kod \n alıyor büyük ihtimalle. Halı tipini üstte alırsan düzelir.
#include <stdio.h> #include <conio.h>
int main () { char kod; float alan;
printf("Hali Tipini Seciniz:"); scanf("%c",&kod); printf("kac metrekare hali dosenecek:"); scanf("%f",&alan);
if (kod=='T') printf("Odenmesi gereken ucret: %f", alan*18.80); else if(kod=='B') printf("odenmesi gereken ucret: %f", alan*17.80); else if(kod=='S') printf("odenmesi gereken ucret: %f", alan*19.20); else printf("yanlis kod girdiniz");
getch(); return(0); }
Hocam ilk halı tipini üste aldım hata verdi neden hata verdi bilmiyorum. Sormak istediğim soru şu ben scanf ile bi karakter tanıttım diyelim araya başka scanf fonksiyonu girdiğinde (örnek olarak kaç metrekare halı falan filan) en başta tanıttığım karaktere göre if fonksiyonlarını dizersem program karakteri aklında tutup işlem yapar dimi? Anlatabildim mi bilmiyorum
Tabiyki yapar , farklı yerlere atıyorsan tabi . Yani scanf("%d",&a); yaptığında a yı sonradan değiştirmezsen program bitene kadar a aynı kalır.
http://www.gidnetwork.com/b-59.html , alan,; yapmışsın , hali icin alan girdikten sonra entera basınca kod \n alıyor büyük ihtimalle. Halı tipini üstte alırsan düzelir.
#include <stdio.h> #include <conio.h>
int main () { char kod; float alan;
printf("Hali Tipini Seciniz:"); scanf("%c",&kod); printf("kac metrekare hali dosenecek:"); scanf("%f",&alan);
if (kod=='T') printf("Odenmesi gereken ucret: %f", alan*18.80); else if(kod=='B') printf("odenmesi gereken ucret: %f", alan*17.80); else if(kod=='S') printf("odenmesi gereken ucret: %f", alan*19.20); else printf("yanlis kod girdiniz");
getch(); return(0); }
Hocam ilk halı tipini üste aldım hata verdi neden hata verdi bilmiyorum. Sormak istediğim soru şu ben scanf ile bi karakter tanıttım diyelim araya başka scanf fonksiyonu girdiğinde (örnek olarak kaç metrekare halı falan filan) en başta tanıttığım karaktere göre if fonksiyonlarını dizersem program karakteri aklında tutup işlem yapar dimi? Anlatabildim mi bilmiyorum
Tabiyki yapar , farklı yerlere atıyorsan tabi . Yani scanf("%d",&a); yaptığında a yı sonradan değiştirmezsen program bitene kadar a aynı kalır.
Hocam aslında demek istediğim
1 printf("Hali Tipini Seciniz:"); scanf("%c",&kod); printf("kac metrekare hali dosenecek:"); scanf("%f",&alan);
2 printf("kac metrekare hali dosenecek:"); scanf("%f",&alan); printf("Hali Tipini Seciniz:"); scanf("%c",&kod);
Şu ikisinin arasında bi fark var mı. Yani 1.de halı tipini seçiyorum ondan sonra scanf'te bi float okutuyorum ya. İlk scanf'te okuttuğum karaktere göre (T,S,B) ifleri gidip dizdiğimde bi problem çıkar mı. Yani ifleri bağlıyacağım scanf hemen iflerin üstündemi olmalı 2. kod gibi? yoksa 1. koddaki gibi olursa bişey olmaz mı?
İkisi arasında normalde hiç bir fark yok , çok ufak bir fark var oda senin programının çalışmamasına neden oluyor .
scanf("%d",&sayi); scanf("%c",&a); Bu şekilde dediğimizi farz edelim , sen sayi için 2 girdin entera bastın , senin a için karakter girmeni beklemeyecek . Sen entera bastığında a ya \n değeri de biz istemeden atanmış olacak.
scanf("%c",&a); scanf("%d",&sayi); Bu şekilde dersek ilk karakteri bekleyecek çünkü a ya giden bir veri yok , a yı girip entera bastığımızda int değerine \n değeri gidemediğinden sorun çıkmıyor.
Aşağıdaki kodu çalıştırarak daha net anlarsın . Normalde yıldızlar nerede olmalıydı nereye gittiler.
Öncelikle teşekkürler hocam , aynen scanf nin yukarısına çıkardım sorun kalmadı . Anlamadığım şey getchar ı neden böyle yapmışlar farklı bir şey için mi kullanılıyor ? Uzun bir program da scanf ile getcharı birlikte kullanmak eziyet olur heralde.
Sorun getchar dan değil scanf den kaynaklanıyor. getchar oldukça basit ve ne yapıcağı kestirilebilen bir fonksiyon. Ancak scanf öyle değil. Mesela scanf int beklerken kullanıcı float girerse program sonsuz döngüye giriyor. Mümkün olduğunca scanf ve gets gibi fonksiyonlardan uzak durmak lazım.
Edit: scanf in yaptığı her şeyi getchar la da yapabilirsiniz.
İkisi arasında normalde hiç bir fark yok , çok ufak bir fark var oda senin programının çalışmamasına neden oluyor .
scanf("%d",&sayi); scanf("%c",&a); Bu şekilde dediğimizi farz edelim , sen sayi için 2 girdin entera bastın , senin a için karakter girmeni beklemeyecek . Sen entera bastığında a ya \n değeri de biz istemeden atanmış olacak.
scanf("%c",&a); scanf("%d",&sayi); Bu şekilde dersek ilk karakteri bekleyecek çünkü a ya giden bir veri yok , a yı girip entera bastığımızda int değerine \n değeri gidemediğinden sorun çıkmıyor.
Aşağıdaki kodu çalıştırarak daha net anlarsın . Normalde yıldızlar nerede olmalıydı nereye gittiler.
İki şekilde de programı çalıştırdım dediğiniz gibi 1.de beklemiyor aynı benim halı programında yaşadığım sorun gibi. Ancak \n değeri neden otomatik atanıyor neden beklemiyor program onu bi türlü anlayamadım
Öncelikle teşekkürler hocam , aynen scanf nin yukarısına çıkardım sorun kalmadı . Anlamadığım şey getchar ı neden böyle yapmışlar farklı bir şey için mi kullanılıyor ? Uzun bir program da scanf ile getcharı birlikte kullanmak eziyet olur heralde.
Sorun getchar dan değil scanf den kaynaklanıyor. getchar oldukça basit ve ne yapıcağı kestirilebilen bir fonksiyon. Ancak scanf öyle değil. Mesela scanf int beklerken kullanıcı float girerse program sonsuz döngüye giriyor. Mümkün olduğunca scanf ve gets gibi fonksiyonlardan uzak durmak lazım.
Edit: scanf in yaptığı her şeyi getchar la da yapabilirsiniz.
Ben getchar'ı program kapanmasın diye yazıyorum farklı bi kullanımı varsa bilmiyorum.
http://www.gidnetwork.com/b-59.html , alan,; yapmışsın , hali icin alan girdikten sonra entera basınca kod \n alıyor büyük ihtimalle. Halı tipini üstte alırsan düzelir.
#include <stdio.h> #include <conio.h>
int main () { char kod; float alan;
printf("Hali Tipini Seciniz:"); scanf("%c",&kod); printf("kac metrekare hali dosenecek:"); scanf("%f",&alan);
if (kod=='T') printf("Odenmesi gereken ucret: %f", alan*18.80); else if(kod=='B') printf("odenmesi gereken ucret: %f", alan*17.80); else if(kod=='S') printf("odenmesi gereken ucret: %f", alan*19.20); else printf("yanlis kod girdiniz");
getch(); return(0); }
Hocam ilk halı tipini üste aldım hata verdi neden hata verdi bilmiyorum. Sormak istediğim soru şu ben scanf ile bi karakter tanıttım diyelim araya başka scanf fonksiyonu girdiğinde (örnek olarak kaç metrekare halı falan filan) en başta tanıttığım karaktere göre if fonksiyonlarını dizersem program karakteri aklında tutup işlem yapar dimi? Anlatabildim mi bilmiyorum
Tabiyki yapar , farklı yerlere atıyorsan tabi . Yani scanf("%d",&a); yaptığında a yı sonradan değiştirmezsen program bitene kadar a aynı kalır.
Hocam aslında demek istediğim
1 printf("Hali Tipini Seciniz:"); scanf("%c",&kod); printf("kac metrekare hali dosenecek:"); scanf("%f",&alan);
2 printf("kac metrekare hali dosenecek:"); scanf("%f",&alan); printf("Hali Tipini Seciniz:"); scanf("%c",&kod);
Şu ikisinin arasında bi fark var mı. Yani 1.de halı tipini seçiyorum ondan sonra scanf'te bi float okutuyorum ya. İlk scanf'te okuttuğum karaktere göre (T,S,B) ifleri gidip dizdiğimde bi problem çıkar mı. Yani ifleri bağlıyacağım scanf hemen iflerin üstündemi olmalı 2. kod gibi? yoksa 1. koddaki gibi olursa bişey olmaz mı?
Yok 2si arasında fark yok. Sonuçta tanımladığın değişken türlerin ve kullanıcıdan alınan verilerde değişikli olmuyor.
Elimizde dynamic bir array var. Bu arraydan bir elemanı silmek istiyorum. Bunu delete komutunu kullanarak nasıl yapıcam ?
Aklımda şöyle bir yol var: geçici bir dynamic array açıp o elemana kadar kopyalamak, o elemanı pas geçmek ve geri kalanını kopyalamaya devam etmek. Yani 2 tane for kullanarak. Başka ve kısa yolu yok mudur bunun?
delete kullanırsan arrayın o sildiğin kısmı boş(0) kalır, array küçülmez.
Eğer o kısmı silerek arrayı küçültmek istiyorsan array tanımlamak yerine std list veya vector kullanabilirsin. Mesela vector kullanırsan silme işlemini şunla yapacaksın;http://cplusplus.com/vector::erase
< Bu mesaj bu kişi tarafından değiştirildi erorcun -- 10 Eylül 2012; 3:03:50 >
vector konteyner'ı asm'de yazılmış ve hızlı. Tabiki taşıma söz konusu olduğunda yavaş kalıyo list ve deque'ye göre fakat hız sizin için aşırı derecede(**** repliği oldu) önemli değilse vector'ü kullanabilirsin.
Elimizde dynamic bir array var. Bu arraydan bir elemanı silmek istiyorum. Bunu delete komutunu kullanarak nasıl yapıcam ?
Aklımda şöyle bir yol var: geçici bir dynamic array açıp o elemana kadar kopyalamak, o elemanı pas geçmek ve geri kalanını kopyalamaya devam etmek. Yani 2 tane for kullanarak. Başka ve kısa yolu yok mudur bunun?
Şu şekilde yapılabiliyor diye hatırlıyorum. Ama normal dizilerde olmuyor. Normal dizilerde arkadaşların dediklerini kullanabilirsin.
Örneğin ;
string *kullanıcı_adi[50]; ...... ....... delete kullanici_adi[kullanıcıdan alınan değer veya silmek istediğin değer];
ya da internette görmüştüm diyelim baştaki elemanı silmek istiyorsun, diyelim elimizde ABC olsun. Şimdi A'yı silmek istiyorsun. Şöyle bir yöntem izleyebilirsin. Normalde A B C 'de A silinince Yeni hali B C şeklinde olacak. Bu olurken şu işlemi gerçekleştirebilirsin, B C C yap. Yani B'yi sola taşı, C'yi sola taşı. Ardından sondan C'yi sil. Bu şeiklde çıktı B C verecek ve A silinmiş olacak.
Elimizde dynamic bir array var. Bu arraydan bir elemanı silmek istiyorum. Bunu delete komutunu kullanarak nasıl yapıcam ?
Aklımda şöyle bir yol var: geçici bir dynamic array açıp o elemana kadar kopyalamak, o elemanı pas geçmek ve geri kalanını kopyalamaya devam etmek. Yani 2 tane for kullanarak. Başka ve kısa yolu yok mudur bunun?
Şu şekilde yapılabiliyor diye hatırlıyorum. Ama normal dizilerde olmuyor. Normal dizilerde arkadaşların dediklerini kullanabilirsin.
Örneğin ;
string *kullanıcı_adi[50]; ...... ....... delete kullanici_adi[kullanıcıdan alınan değer veya silmek istediğin değer];
ya da internette görmüştüm diyelim baştaki elemanı silmek istiyorsun, diyelim elimizde ABC olsun. Şimdi A'yı silmek istiyorsun. Şöyle bir yöntem izleyebilirsin. Normalde A B C 'de A silinince Yeni hali B C şeklinde olacak. Bu olurken şu işlemi gerçekleştirebilirsin, B C C yap. Yani B'yi sola taşı, C'yi sola taşı. Ardından sondan C'yi sil. Bu şeiklde çıktı B C verecek ve A silinmiş olacak.
Hocam delete list[index] tarzı yazınca hata veriyor.
Elimizde dynamic bir array var. Bu arraydan bir elemanı silmek istiyorum. Bunu delete komutunu kullanarak nasıl yapıcam ?
Aklımda şöyle bir yol var: geçici bir dynamic array açıp o elemana kadar kopyalamak, o elemanı pas geçmek ve geri kalanını kopyalamaya devam etmek. Yani 2 tane for kullanarak. Başka ve kısa yolu yok mudur bunun?
Şu şekilde yapılabiliyor diye hatırlıyorum. Ama normal dizilerde olmuyor. Normal dizilerde arkadaşların dediklerini kullanabilirsin.
Örneğin ;
string *kullanıcı_adi[50]; ...... ....... delete kullanici_adi[kullanıcıdan alınan değer veya silmek istediğin değer];
ya da internette görmüştüm diyelim baştaki elemanı silmek istiyorsun, diyelim elimizde ABC olsun. Şimdi A'yı silmek istiyorsun. Şöyle bir yöntem izleyebilirsin. Normalde A B C 'de A silinince Yeni hali B C şeklinde olacak. Bu olurken şu işlemi gerçekleştirebilirsin, B C C yap. Yani B'yi sola taşı, C'yi sola taşı. Ardından sondan C'yi sil. Bu şeiklde çıktı B C verecek ve A silinmiş olacak.
Hocam delete list[index] tarzı yazınca hata veriyor.
Dediğim gibi biraz karışık. Anlatmaya kalksam iyice karışacak. En iyisi arkadaşların dediği vektör yöntemini dene. Bu arada silmek istediğin değer sayı mı char mı string mi ?
İnline fonksiyonlar programın daha düzenli,hızlı çalışmasını sağlarlar. Tek dezavantajı boyutu arttırmasıdır.. O da abartılacak kadar değil.
return (*m_bookingDate) ? m_bookingDate : parseBookingDate(); kısmında operatör kullanılmış. ?:(ternary operatörü) Operatörü. İf'in yaptığı görevi yapar
Bu operatör şu şekilde kullanılır koşul ? doğru_ise : yanlış_ise
inline fonksiyonu anladim.tesekkürler ?:(ternary operatörü) de biliyordum fakat buradaki kosulu (*m_bookingDate) anlamadim. Bu nasil bir kosul ve kosul yanlis ise parseBookingDate() fonksiyonu cagrilcak fakat dogru ise m_bookingDate ile ne yapilmak isteniyor anlamadim
Elimizde dynamic bir array var. Bu arraydan bir elemanı silmek istiyorum. Bunu delete komutunu kullanarak nasıl yapıcam ?
Aklımda şöyle bir yol var: geçici bir dynamic array açıp o elemana kadar kopyalamak, o elemanı pas geçmek ve geri kalanını kopyalamaya devam etmek. Yani 2 tane for kullanarak. Başka ve kısa yolu yok mudur bunun?
Şu şekilde yapılabiliyor diye hatırlıyorum. Ama normal dizilerde olmuyor. Normal dizilerde arkadaşların dediklerini kullanabilirsin.
Örneğin ;
string *kullanıcı_adi[50]; ...... ....... delete kullanici_adi[kullanıcıdan alınan değer veya silmek istediğin değer];
ya da internette görmüştüm diyelim baştaki elemanı silmek istiyorsun, diyelim elimizde ABC olsun. Şimdi A'yı silmek istiyorsun. Şöyle bir yöntem izleyebilirsin. Normalde A B C 'de A silinince Yeni hali B C şeklinde olacak. Bu olurken şu işlemi gerçekleştirebilirsin, B C C yap. Yani B'yi sola taşı, C'yi sola taşı. Ardından sondan C'yi sil. Bu şeiklde çıktı B C verecek ve A silinmiş olacak.
Hocam delete list[index] tarzı yazınca hata veriyor.
Dediğim gibi biraz karışık. Anlatmaya kalksam iyice karışacak. En iyisi arkadaşların dediği vektör yöntemini dene. Bu arada silmek istediğin değer sayı mı char mı string mi ?
Ben açıkçası pointerlarla yapmaya çalışıyorum, bu durumu daha iyi anlayabilmek için. Silmek istediğim şeyde kendi yarattığım Kisi objesi.
Tabiyki yapar , farklı yerlere atıyorsan tabi
Bu mesaja 1 cevap geldi. Cevapları Gizle
Hocam aslında demek istediğim
1 printf("Hali Tipini Seciniz:");
scanf("%c",&kod);
printf("kac metrekare hali dosenecek:");
scanf("%f",&alan);
2 printf("kac metrekare hali dosenecek:");
scanf("%f",&alan);
printf("Hali Tipini Seciniz:");
scanf("%c",&kod);
Şu ikisinin arasında bi fark var mı. Yani 1.de halı tipini seçiyorum ondan sonra scanf'te bi float okutuyorum ya. İlk scanf'te okuttuğum karaktere göre (T,S,B) ifleri gidip dizdiğimde bi problem çıkar mı. Yani ifleri bağlıyacağım scanf hemen iflerin üstündemi olmalı 2. kod gibi? yoksa 1. koddaki gibi olursa bişey olmaz mı?
Bu mesaja 2 cevap geldi. Cevapları Gizle
İkisi arasında normalde hiç bir fark yok , çok ufak bir fark var oda senin programının çalışmamasına neden oluyor .
scanf("%d",&sayi);
scanf("%c",&a); Bu şekilde dediğimizi farz edelim , sen sayi için 2 girdin entera bastın , senin a için karakter girmeni beklemeyecek . Sen entera bastığında a ya \n değeri de biz istemeden atanmış olacak.
scanf("%c",&a);
scanf("%d",&sayi); Bu şekilde dersek ilk karakteri bekleyecek çünkü a ya giden bir veri yok , a yı girip entera bastığımızda int değerine \n değeri gidemediğinden sorun çıkmıyor.
Aşağıdaki kodu çalıştırarak daha net anlarsın . Normalde yıldızlar nerede olmalıydı nereye gittiler.
< Bu mesaj bu kişi tarafından değiştirildi strahd_von_zarovich -- 9 Eylül 2012; 22:34:30 >
Bu mesaja 1 cevap geldi. Cevapları Gizle
Sorun getchar dan değil scanf den kaynaklanıyor. getchar oldukça basit ve ne yapıcağı kestirilebilen bir fonksiyon. Ancak scanf öyle değil. Mesela scanf int beklerken kullanıcı float girerse program sonsuz döngüye giriyor. Mümkün olduğunca scanf ve gets gibi fonksiyonlardan uzak durmak lazım.
Edit: scanf in yaptığı her şeyi getchar la da yapabilirsiniz.
< Bu mesaj bu kişi tarafından değiştirildi crshr -- 9 Eylül 2012; 22:51:35 >
Bu mesaja 1 cevap geldi. Cevapları Gizle
İki şekilde de programı çalıştırdım dediğiniz gibi 1.de beklemiyor aynı benim halı programında yaşadığım sorun gibi. Ancak \n değeri neden otomatik atanıyor neden beklemiyor program onu bi türlü anlayamadım
Ben getchar'ı program kapanmasın diye yazıyorum farklı bi kullanımı varsa bilmiyorum.
Yok 2si arasında fark yok. Sonuçta tanımladığın değişken türlerin ve kullanıcıdan alınan verilerde değişikli olmuyor.
Elimizde dynamic bir array var. Bu arraydan bir elemanı silmek istiyorum. Bunu delete komutunu kullanarak nasıl yapıcam ?
Aklımda şöyle bir yol var: geçici bir dynamic array açıp o elemana kadar kopyalamak, o elemanı pas geçmek ve geri kalanını kopyalamaya devam etmek. Yani 2 tane for kullanarak. Başka ve kısa yolu yok mudur bunun?
Bu mesaja 2 cevap geldi. Cevapları Gizle
Eğer o kısmı silerek arrayı küçültmek istiyorsan array tanımlamak yerine std list veya vector kullanabilirsin. Mesela vector kullanırsan silme işlemini şunla yapacaksın;http://cplusplus.com/vector::erase
< Bu mesaj bu kişi tarafından değiştirildi erorcun -- 10 Eylül 2012; 3:03:50 >
Şu şekilde yapılabiliyor diye hatırlıyorum. Ama normal dizilerde olmuyor. Normal dizilerde arkadaşların dediklerini kullanabilirsin.
Örneğin ;
string *kullanıcı_adi[50];
......
.......
delete kullanici_adi[kullanıcıdan alınan değer veya silmek istediğin değer];
ya da internette görmüştüm diyelim baştaki elemanı silmek istiyorsun, diyelim elimizde ABC olsun.
Şimdi A'yı silmek istiyorsun. Şöyle bir yöntem izleyebilirsin. Normalde A B C 'de A silinince Yeni hali B C şeklinde olacak. Bu olurken şu işlemi gerçekleştirebilirsin, B C C yap. Yani B'yi sola taşı, C'yi sola taşı. Ardından sondan C'yi sil. Bu şeiklde çıktı B C verecek ve A silinmiş olacak.
Bu mesaja 1 cevap geldi. Cevapları Gizle
Hocam delete list[index] tarzı yazınca hata veriyor.
Bu mesaja 2 cevap geldi. Cevapları Gizle
asagidaki inline fonksiyonu birisi aciklayabilir mi?
özellikle return (*m_bookingDate) ? m_bookingDate : parseBookingDate(); ifadesini anlamadim...
Bu mesaja 1 cevap geldi. Cevapları Gizle
İnline fonksiyonlar programın daha düzenli,hızlı çalışmasını sağlarlar. Tek dezavantajı boyutu arttırmasıdır.. O da abartılacak kadar değil.
return (*m_bookingDate) ? m_bookingDate : parseBookingDate(); kısmında operatör kullanılmış. ?:(ternary operatörü) Operatörü. İf'in yaptığı görevi yapar
Bu operatör şu şekilde kullanılır
koşul ? doğru_ise : yanlış_ise
Bu mesaja 1 cevap geldi. Cevapları Gizle
Dediğim gibi biraz karışık. Anlatmaya kalksam iyice karışacak. En iyisi arkadaşların dediği vektör yöntemini dene.
Bu arada silmek istediğin değer sayı mı char mı string mi ?
Bu mesaja 1 cevap geldi. Cevapları Gizle
inline fonksiyonu anladim.tesekkürler
?:(ternary operatörü) de biliyordum fakat buradaki kosulu (*m_bookingDate) anlamadim. Bu nasil bir kosul ve kosul yanlis ise parseBookingDate() fonksiyonu cagrilcak fakat dogru ise m_bookingDate ile ne yapilmak isteniyor anlamadim
Bu mesaja 1 cevap geldi. Cevapları Gizle
Ben açıkçası pointerlarla yapmaya çalışıyorum, bu durumu daha iyi anlayabilmek için.
Silmek istediğim şeyde kendi yarattığım Kisi objesi.
Bu mesaja 1 cevap geldi. Cevapları Gizle
Kişi objesi derken, string mi girilecek değer olarak ?
Bu mesaja 1 cevap geldi. Cevapları Gizle