Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
4171
Cevap
168400
Tıklama
3
Öne Çıkarma
Cevap: C/C++/C# Sorularınız Buraya. . .(GÜNCEL) (18. sayfa)
S
13 yıl
Binbaşı

quote:

Orijinalden alıntı: £XE

quote:

Orijinalden alıntı: strahd_von_zarovich

quote:

Orijinalden alıntı: mertov

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.

#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);
}


Yok , 'ü bende gördüm.. Kaldırdım fakat gene hatalı çalışıyor. C'diline C++ kadar hakim değilim fakat hata olmaması gerekiyor programda.

Bence virgül haricinde hata olmaması lazım hocam ama verdiğim linkte şurayı okuduktan sonra değişti kararım.


But lack of knowledge is what gets most programmers. They want to read a character from the keyboard so they very logically use the format string "%c". Then wonder why the next read is messed up. How are they supposed to know that after the character was read there was a \n left behind? I've rarely (never?) seen documentation explaining that fact, but through experimentation and logical thinking (and a good debugger), one can in fact figure out what's happening.



S
13 yıl
Binbaşı

quote:

Orijinalden alıntı: £XE
quote:

Orijinalden alıntı: mertov
Şimdi yeni bir şey daha buldum , scanf de % den önce bir boşluk bırakılırsa tampon bölgesini sıfırlayabiliyormuş , yani scanf(" %c",&kod); şeklinde yazılırsa bazı derleyicilerde doğru çalışır, ama bazı derleyiciler de oradaki boşluğu atlayarak okuyormuş bu durumda gene aynı hata oluşacak . Yani sorun ilk scanf de entera bastığımızda ikinci scanf içine veri gidiyor o yüzden direk orada da değer girilmiş ve entera basılmış gibi oluyor. Bunu önlemek için tampon bölgeyi sıfırlamak gerekiyormuş bunun içinde fflsuh() fonksiyonu kullanıyormuş , ama bu fonksiyon standart değilmiş ve her derleyici de bulunmaya biliyormuş. Sonuç olarak 2 uçlu bir değnek .


Elektro_gadget hocam yardım et bize


Bu mesaja 1 cevap geldi.
S
13 yıl
Binbaşı

quote:

Orijinalden alıntı: mertov

Son olarak aşağıdaki şekilde yazarsan kodun çalışır , çalışmama nedenleri de yukarıda yazdığım sebepler.

#include <stdio.h> 
#include <conio.h>


int main ()
{
char kod;
float alan;


printf("kac metrekare hali dosenecek:");
scanf("%f",&alan);
printf("Hali Tipini Seciniz:");
fflush(stdin);
scanf("%c",&kod);

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);
}



M
13 yıl
Yüzbaşı

quote:

Orijinalden alıntı: strahd_von_zarovich

quote:

Orijinalden alıntı: mertov

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


Bu mesaja 1 cevap geldi.
M
13 yıl
Yüzbaşı

quote:

Orijinalden alıntı: strahd_von_zarovich

quote:

Orijinalden alıntı: £XE
quote:

Orijinalden alıntı: mertov
Şimdi yeni bir şey daha buldum , scanf de % den önce bir boşluk bırakılırsa tampon bölgesini sıfırlayabiliyormuş , yani scanf(" %c",&kod); şeklinde yazılırsa bazı derleyicilerde doğru çalışır, ama bazı derleyiciler de oradaki boşluğu atlayarak okuyormuş bu durumda gene aynı hata oluşacak . Yani sorun ilk scanf de entera bastığımızda ikinci scanf içine veri gidiyor o yüzden direk orada da değer girilmiş ve entera basılmış gibi oluyor. Bunu önlemek için tampon bölgeyi sıfırlamak gerekiyormuş bunun içinde fflsuh() fonksiyonu kullanıyormuş , ama bu fonksiyon standart değilmiş ve her derleyici de bulunmaya biliyormuş. Sonuç olarak 2 uçlu bir değnek .


Elektro_gadget hocam yardım et bize

Hocam yazdığım kodlara tekrar baktığımda scanf'de %'den önce bosluğa denk gelmedim sizin yazdığınız son hali düzgün çalışıyor ama virgülü kaldırsam da benimki çalışmıyor. Açıkçası neden benim program çalışmıyor halen anlamadım ilgilendiğiniz için teşekkürler.



M
13 yıl
Yüzbaşı

quote:

Orijinalden alıntı: £XE

quote:

Orijinalden alıntı: mertov



strahd_von_zarovich arkadaşında dediği gibi float alan,; kısmında , koymuşsun. Onu kaldırıp dener misin. Bende gene hatalı çalıştı ama...

Bende de hatalı çalışıyor dev c++ kullanıyorum.


Bu mesaja 1 cevap geldi.
S
13 yıl
Binbaşı

quote:

Orijinalden alıntı: mertov

quote:

Orijinalden alıntı: £XE

quote:

Orijinalden alıntı: mertov



strahd_von_zarovich arkadaşında dediği gibi float alan,; kısmında , koymuşsun. Onu kaldırıp dener misin. Bende gene hatalı çalıştı ama...

Bende de hatalı çalışıyor dev c++ kullanıyorum.

Birinci hatan alan,; orada virgülü silicen . İkincisi alan için 20 girdin diyelim enter a bastığında ikinci scanf e sen istemeden bir değer gönderiyor bunu önlemek için son kodda yazdığım gibi fflush(stdin); kullandım bu o gönderilen bilgiyi sıfırlıyor bu sayede senden düzgün şekilde karakter isteyebiliyor.


Bu mesaja 1 cevap geldi.
£
13 yıl
Yüzbaşı
Konu Sahibi

C++ da 2dk da yazardın şunu. Amma ince nokta varmış C'De



S
13 yıl
Binbaşı

quote:

Orijinalden alıntı: mertov

quote:

Orijinalden alıntı: strahd_von_zarovich

quote:

Orijinalden alıntı: mertov

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.


Bu mesaja 1 cevap geldi.
M
13 yıl
Yüzbaşı

quote:

Orijinalden alıntı: strahd_von_zarovich

quote:

Orijinalden alıntı: mertov

quote:

Orijinalden alıntı: strahd_von_zarovich

quote:

Orijinalden alıntı: mertov

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ı?


Bu mesaja 2 cevap geldi.
S
13 yıl
Binbaşı

quote:

Orijinalden alıntı: mertov

İ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.

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

int main()
{
int a;
char b;

printf("sayi girin");
scanf("%d",&a);
printf("karakter girin");
scanf("%c",&b);

printf("a sayisi = %d , karakter:%c *****",a,b);


system("PAUSE");
return 0;
}





< 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.
C
13 yıl
Yüzbaşı

quote:

Orijinalden alıntı: strahd_von_zarovich

quote:

Orijinalden alıntı: crshr

Ö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.





< Bu mesaj bu kişi tarafından değiştirildi crshr -- 9 Eylül 2012; 22:51:35 >
Bu mesaja 1 cevap geldi.
M
13 yıl
Yüzbaşı

quote:

Orijinalden alıntı: strahd_von_zarovich

quote:

Orijinalden alıntı: mertov

İ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.

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

int main()
{
int a;
char b;

printf("sayi girin");
scanf("%d",&a);
printf("karakter girin");
scanf("%c",&b);

printf("a sayisi = %d , karakter:%c *****",a,b);


system("PAUSE");
return 0;
}


İ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



M
13 yıl
Yüzbaşı

quote:

Orijinalden alıntı: crshr

quote:

Orijinalden alıntı: strahd_von_zarovich

quote:

Orijinalden alıntı: crshr

Ö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.



£
13 yıl
Yüzbaşı
Konu Sahibi

quote:

Orijinalden alıntı: mertov

quote:

Orijinalden alıntı: strahd_von_zarovich

quote:

Orijinalden alıntı: mertov

quote:

Orijinalden alıntı: strahd_von_zarovich

quote:

Orijinalden alıntı: mertov

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.



K
13 yıl
Binbaşı

Benim de bir sorum var c ++ için.

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.
E
13 yıl
Teğmen

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 >

H
13 yıl
Yüzbaşı

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.



£
13 yıl
Yüzbaşı
Konu Sahibi

quote:

Orijinalden alıntı: Kırmızı Pervane

Benim de bir sorum var c ++ için.

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.


Bu mesaja 1 cevap geldi.
K
13 yıl
Binbaşı

quote:

Orijinalden alıntı: £XE

quote:

Orijinalden alıntı: Kırmızı Pervane

Benim de bir sorum var c ++ için.

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.


Bu mesaja 2 cevap geldi.