Arama butonu
Bu konudaki kullanıcılar: 3 misafir, 2 mobil kullanıcı
4171
Cevap
168031
Tıklama
3
Öne Çıkarma
Cevap: C/C++/C# Sorularınız Buraya. . .(GÜNCEL) (107. sayfa)
L
12 yıl
Yarbay

Geany'i deneyeceğim :)
Qt Creator'u ben de beğenmiştim fakat tek dosya ile çalışmayı bulamadım. İlla ki proje şeklinde yapmak gerekiyor sanırım. O da pek hoşuma gitmedi benim açıkçası. Öneirleriniz için teşekkürler:)


@Mtntk @-Source-





< Bu mesaj bu kişi tarafından değiştirildi Lord Nibbler -- 21 Ekim 2013; 22:36:21 >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @Mtntk , @-Source-
R
12 yıl
Yüzbaşı

arkadaşlar ben daha yeni yeni c öğreniyorum. basit bir sorum var.
scanf ile bir sayı alırken bunun sayı dışında bir karakter olduğunda programın uyarı vermesini istiyorum.
nasıl yapabilirim? teşekkürler.


Bu mesaja 2 cevap geldi.
Ö
12 yıl
Yüzbaşı

quote:

Orijinalden alıntı: reojuve

arkadaşlar ben daha yeni yeni c öğreniyorum. basit bir sorum var.
scanf ile bir sayı alırken bunun sayı dışında bir karakter olduğunda programın uyarı vermesini istiyorum.
nasıl yapabilirim? teşekkürler.

Merhaba,

Aşağıya ekleyeceğim kodlar sayesinde bu istediğiniz şeyi yapabilirsiniz hocam.

Kolay gelsin...

Kodlar:
 
int input;

printf("değer yazın: ");
if(scanf("%i",&input) == 1)
printf("doğru veri");
else
printf("yanlış veri");



M
12 yıl
Yarbay

quote:

Orijinalden alıntı: reojuve

arkadaşlar ben daha yeni yeni c öğreniyorum. basit bir sorum var.
scanf ile bir sayı alırken bunun sayı dışında bir karakter olduğunda programın uyarı vermesini istiyorum.
nasıl yapabilirim? teşekkürler.

isdigit() fonksiyonunu kullanabilirsin.Fonksiyonu kullanmak için ctype.h kütüphanesini include etmelisin.
Örnek bir uygulama yazdım.

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

int main()
{
char sayi;

printf("Birsey giriniz: ");
scanf("%c",&sayi);

if(isdigit(sayi))
{
printf("Sayi girdin");
}
else
{
printf("Harf girdin);
}
getche();
}




R
12 yıl
Yüzbaşı

teşekkürler.




Bu mesajda bahsedilenler: @Muco53 , @özgür beyin
F
12 yıl
Binbaşı

quote:

Orijinalden alıntı: elektro_gadget

quote:

Normal şartlarda evet, fakat birisi disassemble edip büyük bir projenizi 1 dakika içinde değiştirdiğinde bu sözleri bir daha edemezsiniz.


Tecrübeli bir cracker'ı calloc ile mi engelleyeceksin? Güvenli endişesi duyulan projelerde zaten uzman desteği alınır. Öyle onu bunu kullanma demekle güvenlik sağlanmaz. Adamlar bu işlere milyon dolarlar harcadığı halde yetersiz kalıyor.

quote:

overflow için ise isterseniz örneğini verebilirim.


İyi olur.

quote:

adam ileriki aşamalarda memcpy(mesela iki str ve karakterbirleştirip , veya binary bloğunu temiz alana taşımak isteyebilir) ile bir şeyler taşıyabilir bu durumda sonlandırıcı eklemekle uğraşmamak için zaten hazır olan sonlandırıcılar kullanılır. daha sonra adresi bellekte tutmadan basit bir for döngüsü ile attığı şeylere ulaşabilir)
malloc da kullanılabilir fakat bu sefer de pozisyon tutmak gerekir


Burada güvenlikle ilgili herhangi birşey söylememişsin. Zaten ağır string işlemlerinde bu fonksiyonlar çok yorar ve C uygun dil olmaktan çıkar. C++ ile mis gibi string sınıfları kullanılabilir. Fazla kasmaya gerek yok. Herşeyi yerinde kullanacaksın.

quote:

O güvenli denilen fonksiyonlar illegal olan bölgeye yazmıyor ama kopyalamayı eksik bırakıyor. Bunun neresi güvenli?

Burada anlatılmak isteneni anlamadım.


Mesela harici bir kaynaktan string bilgisi alınacak ve bir yere kopyalanacak diyelim. Bunun için güvenli olduğunu düşündüğün strcpy_s kullandın ve buffer uzunluğunu da verdin. Gelen string buffer ı aşıyorsa yarım kalır ve kopyalanmaz. Uygulama çökmez ama hatalı işleyişe sebep olur. Bunun çözümü _s takılı "güvenli!" fonksiyonlar kullanmak değil buffer uzunluğunu garanti altına almaktır.

quote:

işlemci kullanıcıdan aldığı her metindeki % leri %% olarak mı değiştirsin? Ekstra zaman kaybı.


Emin ol oradaki zaman kaybı senin o gereksiz kodları yazarken kaybettiğin zamandan çok çok daha kısadır.

quote:

C++ ın çoğu fonksiyonu C den daha yavaştır.
C++ ı C++ yapan özellikleri çıkartınca zaten hız farkı kalmaz.


Örnek? Kastettiğin virtual fonksiyonlar ise onu C ile gerçeklediğin zaman yine aynı şey olacak. Şablonlarda da hız kaybı değil bilakis hız kazancı ve üzerine tip güvenliği var. Birşey yazıyorsan onu somutlaştır ki havada kalmasın.

Konuyu gezerken gördüm cevabı bildirim gelmemiş o yüzden şimdi yanıtlayayım.
===
-Tecrübeli bir cracker'ı calloc ile mi engelleyeceksin? Güvenli endişesi duyulan projelerde zaten uzman desteği alınır. Öyle onu bunu kullanma demekle güvenlik sağlanmaz. Adamlar bu işlere milyon dolarlar harcadığı halde yetersiz kalıyor.

>İsteyen istediği gibi yazar zaten ben sadece uyardım.

Overflow:
return printf("%200000000000000c",'a') < 0;

Normalde overflow hatası vermesi lazım ancak daha kötüsü kod yanlış yorumlanıp sadece a harfinin yazıldığını göreceksiniz. Üstelik hata bile vermeyecek.
Bu kodu msvc11 derlediğinde düzgün çalıştığını ama Gnu(mingw) derlediğinde yukarıdaki gibi olduğunu göreceksiniz. Yani sorun daha da büyük.

Ayrıca şuna bakın:

int val;
val = 0x7fffffff; /* 2147483647*/
printf("val = %d (0x%x)\n", val, val);
printf("val + 1 = %d (0x%x)\n", val + 1 , val + 1); /*Overflow the int*/
return 0;

bunu cout ile denersek

---
Burada güvenlikle ilgili herhangi birşey söylememişsin. Zaten ağır string işlemlerinde bu fonksiyonlar çok yorar ve C uygun dil olmaktan çıkar. C++ ile mis gibi string sınıfları kullanılabilir. Fazla kasmaya gerek yok. Herşeyi yerinde kullanacaksın.

>güvenlikten dolaylı olarak bahsettim orada o işlemler yapılırsa adam malloc kullanıp pozisyon tutmazsa yine ciddi sorunlar ortaya çıkacak. Bu dönemde projelerde C++ nin kullanılması bence de dediğin gibi daha doğru.
---
Mesela harici bir kaynaktan string bilgisi alınacak ve bir yere kopyalanacak diyelim. Bunun için güvenli olduğunu düşündüğün strcpy_s kullandın ve buffer uzunluğunu da verdin. Gelen string buffer ı aşıyorsa yarım kalır ve kopyalanmaz. Uygulama çökmez ama hatalı işleyişe sebep olur. Bunun çözümü _s takılı "güvenli!" fonksiyonlar kullanmak değil buffer uzunluğunu garanti altına almaktır.

hiç düzgün olarak _s kullanmadığım ve yakın zamanda kullanmayacağım için bu konuda fazla konuşamam ama zaten _s kullanılmamalı. (microsoft özel)
---
Emin ol oradaki zaman kaybı senin o gereksiz kodları yazarken kaybettiğin zamandan çok çok daha kısadır.

>Ben orda güvenliği düşünerek öyle demiştim. Ayrıca fazla güvenlik istemezse şöyle deneyebilir
printf(str);
/*burada % gibi karakterleri ele*/

veya sadece

printf("%s",str);
---
Örnek? Kastettiğin virtual fonksiyonlar ise onu C ile gerçeklediğin zaman yine aynı şey olacak. Şablonlarda da hız kaybı değil bilakis hız kazancı ve üzerine tip güvenliği var. Birşey yazıyorsan onu somutlaştır ki havada kalmasın.

>derleyici optimizasyonlarını hesaba katmazsak (Mesela msvc c++ için çok fazla optimizasyon yapar) öyle olduğu düşünülüyor. Ben hiç test yapmadım. İnternet üzerinde çeşitli kaynaklara baktım 20-30 dakika bir tanesi bile c++ ın hız konusunda daha iyi olduğunu söylemedi.


Bu mesaja 1 cevap geldi.
L
12 yıl
Yüzbaşı

Ben de C'ye yeni başladım ancak kafama takılan bir soru var. Scanf'den float girişi yaptırıyorum ancak sayı yerine harf ya da başka karakter girince program tamamen bozuluyor. do while ile programı başa aldığımda bile gene bozulmuş olarak fonksiyonu sonlandırıyor. Scanf de sayıdan başka bir değer girilmesini nasıl engellerim ya da sayı girilmeyince nasıl tekrar döngüye sokabilirim ?

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

int main()
{
setlocale(LC_ALL,"Turkish");
float sayi_1, sayi_2;
char islem, devam_et;

do // devam_et değeri E ya da e olursa döngüye gir
{
printf("İlk sayiyi giriniz:\n");
scanf("%f", &sayi_1);
printf("\n\n");
printf("İkinci sayiyi giriniz:\n");
scanf("%f", &sayi_2);
printf("\n\n");

printf("İŞLEMLER\n----------\n1: Toplama\n2: Çıkarma\n3: Çarpma\n4: Bölme\n\n");

do // Hatalı giriş yapılıra tekrar işlemi iste.
{
printf("İşlemi seçiniz: ");
islem=getch();

printf("\n\n");

switch(islem)
{
case '1': printf("İşlem: %.2f + %.2f = %.2f\n\n", sayi_1, sayi_2, sayi_1+sayi_2); break;
case '2': printf("İşlem: %.2f - %.2f = %.2f\n\n", sayi_1, sayi_2, sayi_1-sayi_2); break;
case '3': printf("İşlem: %.2f * %.2f = %.2f\n\n", sayi_1, sayi_2, sayi_1*sayi_2); break;
case '4': printf("İşlem: %.2f / %.2f = %.2f\n\n", sayi_1, sayi_2, sayi_1/sayi_2); break;

default:
printf("Hatalı Giriş!\n\a");
}
} while (islem !='1' && islem !='2' && islem !='3' && islem !='4');

// Yeni işlem mi yoksa çıkış mı?
do
{
printf("Yeni bir işlem yapmak istiyor musunuz?[E/H]\n\n");
devam_et=getch();

// Hatalı giriş yapılırsa uyar
if (devam_et != 'E' && devam_et != 'e' && devam_et != 'H' && devam_et != 'h')
{
printf("\nHatalı Giriş!\n\a");
}

} while (devam_et != 'E' && devam_et != 'e' && devam_et != 'H' && devam_et != 'h');

} while(devam_et == 'E' || devam_et == 'e');

// Döngü devam etmiyor ise çık
return 0;

}


Bu programda 1. ya da 2. sayı için oluşturduğum scanf'e harf fln girin. En sondaki "işleme devam-çıkış" kontrolüne E girin dediğimi anlayacaksınız.


Bu mesaja 1 cevap geldi.
K
12 yıl
Onbaşı

C# da bilgili, bi soru hakkında yardımcı olabilicek birisi varmı acaba?


Bu mesaja 2 cevap geldi.
K
12 yıl
Onbaşı

biz henüz random olarak integer atamayı öğrendik fakat bu haftaki ödevde harf atamamız gerekli onu yapamadım. integer atayıp string e eşlemeye çalıştım fakat öylede olmadı. 8 tane harf içinden rastgele 3 ü nü veren bi kod lazım A B C D E F G H harfleri diyelim output ta bana C E H gibi bişey lazım. dediğim gibi string veya char şeklinde random atamayı görmedik.
bilen varsa yardımcı olursa sevinirim.
Not: birde bu random olarak atanan harfleri arkaplanda gizlemesi lazım. kullanıcıya tahmin ettiricek şekilde bi oyun olacak



C
12 yıl
Er

Merhaba millet! Programlamada yeniyim, çok çaylağım. Kendimi deneme amaçlı bir C programı yazdım; ama çalışmıyor. Sorunun nerede olduğunu söyleyebilir misiniz? Program, herhangi bir yarıçap değeri için geçerli olan çemberin çevresini, dairenin alanını, kürenin yüzey alanını ve kürenin hacmini verecekti. Nerede yanlış yapıyorum ve ayrıca gereksiz yere kullandığım bir komut var mı?

 
/* YARIÇAP DEĞERİNDEN ÇEMBERİN ÇEVRESİNİ, DAİRENİN ALANINI,
KÜRENİN YÜZEY ALANINI VE HACMİNİ VEREN C PROGRAMI */

#include <stdio.h>
#include <conio.h>
#include <math.h>
main()
{
float r, a, b, c, d;
printf("\n Yaricapi giriniz: ");
scanf("%u",&r);
a=2*M_PI*r;
b=M_PI*r*r;
c=4*M_PI*r*r;
d=(4/3)*M_PI*(r*r*r);
printf("\n Cemberin cevresi: %u",&a);
printf("\n Dairenin alani: %u",&b);
printf("\n Kurenin yuzey alani: %u",&c);
printf("\n Kurenin hacmi: %u",&d);
getch();
return 0;
}


Bu mesaja 1 cevap geldi.
L
12 yıl
Yarbay

quote:

Orijinalden alıntı: cgtyrsn

Merhaba millet! Programlamada yeniyim, çok çaylağım. Kendimi deneme amaçlı bir C programı yazdım; ama çalışmıyor. Sorunun nerede olduğunu söyleyebilir misiniz? Program, herhangi bir yarıçap değeri için geçerli olan çemberin çevresini, dairenin alanını, kürenin yüzey alanını ve kürenin hacmini verecekti. Nerede yanlış yapıyorum ve ayrıca gereksiz yere kullandığım bir komut var mı?

 
/* YARIÇAP DEĞERİNDEN ÇEMBERİN ÇEVRESİNİ, DAİRENİN ALANINI,
KÜRENİN YÜZEY ALANINI VE HACMİNİ VEREN C PROGRAMI */

#include <stdio.h>
#include <conio.h>
#include <math.h>
main()
{
float r, a, b, c, d;
printf("\n Yaricapi giriniz: ");
scanf("%u",&r);
a=2*M_PI*r;
b=M_PI*r*r;
c=4*M_PI*r*r;
d=(4/3)*M_PI*(r*r*r);
printf("\n Cemberin cevresi: %u",&a);
printf("\n Dairenin alani: %u",&b);
printf("\n Kurenin yuzey alani: %u",&c);
printf("\n Kurenin hacmi: %u",&d);
getch();
return 0;
}


%u yerine %f kullanırsanız sorun çözülecektir. %u unsigned veri tipleri için kullanılabilir.


Bu mesaja 2 cevap geldi.
C
12 yıl
Er

İlgin için teşekkür ederim. Lakin bu sefer de çıktıda tüm sonuçlar 0.000000 oldu. Formüller çalışmadı.


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @GhilleintheMist
S
12 yıl
Binbaşı

quote:

Orijinalden alıntı: cgtyrsn

İlgin için teşekkür ederim. Lakin bu sefer de çıktıda tüm sonuçlar 0.000000 oldu. Formüller çalışmadı.

Niye sayıların adreslerini yazdırıyorsun ? printf de & kullanımına dikkat et , scanf de kullanılır o. "%d",&a yaparsan a'nın adresini yazdırırsın.


Bu mesaja 1 cevap geldi.
C
12 yıl
Er

Çok teşekkür ederim. :D Doğru söylüyorsun. Çalıştı. Daha çok yeniyim de bu işlerde.




Bu mesajda bahsedilenler: @strahd_von_zarovich
E
12 yıl
Çavuş

Öncelikle merhaba. Ben bir proje ile ilgili soru soracaktım. Projede c/c++ dillerini faydalanarak metin belgesi gibi çalışan bir metin editörü tasarlamamız gerekiyor. Tasarlanacak editörde girilen her bir harf, sayı ve işaretler (ascii kodlardan yararlanarak) çift yönlü bir bağlı liste yapısı kullanılarak hafızada tutulacakmış. Böyle bir projeyi nasıl yapabiliriz. Hangi kütüphaneleri kullanabiliriz. Bir yol gösterebilir misiniz? Şimdiden teşekkür ederim.


Bu mesaja 1 cevap geldi.
T
12 yıl
Yüzbaşı

dev c++ programının son sürümünü yükleyebilceğim bi kaynak yollayabilirmisiniz pm den


Bu mesaja 1 cevap geldi.
O
12 yıl
Yüzbaşı

Merhaba arkadaşlar. Veri tiplerinin alt ve üst sınır değerlerini ekrana yansıtmam gereken bi ödev aldım. Şimdi sorum şu:

int char, unsigned char, signed char, ..... şeklinde değişkenleri tanımlayıp daha sonra

Char için alt sınır=a
a=-128
Char için üst sınır=b
b=127

printf ("Char veri tipinin alt sınırı %d, a") yazsam program char koduyla burdaki acıklanacak olan char terimini karıştırabilir mi ? ona göre başlıcam da ? :)



S
12 yıl
Binbaşı

-
12 yıl
Yüzbaşı

@evren199
Bunu bir dizi tanımlayarak yapabilirsin.
char harfler[8] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'};

Sonra random sayını oluşturursun.
int sayi = rand() % 8;

Sonra bu sayıyı indis olarak kullanıp dizideki o elemanı gösterebilirsin.

printf("%c", harfler[sayi]);

-----------------------------------------
@t9r

http://lmgtfy.com/?q=dev-cpp

----------------------------------------
@oraykt

Bunun için gerekli sabitler var senin ek bir değişken tanımlamana gerek yok.
http://www.cplusplus.com/reference/climits/

-------------------------------------
@ebubekir.s

Metin editörü konsol tabanlı mı olacak yoksa grafiksel arayüzü olacak mı? Eğer grafiksel arayüzü olacaksa QT kullanabilirsin.
Galiba bu ödevin asıl amacı size çift yönlü bağlı listeyi öğretmek.http://en.wikipedia.org/wiki/Doubly_linked_list bu linkten faydalanabilirsin liste ile ilgili.


Bu mesaja 2 cevap geldi.

Bu mesajda bahsedilenler: @t9r , @ebubekir.s , @evren199 , @oraykt
C
12 yıl
Binbaşı

C#'da Swicth case ile aralık belirlemek istiyorum, örneğin 0-40 arası ff diyelim

Switch(degiskenadi)
case 0 & 40:
Console.Writeline("FF")

and operatorunun yerine or operatorunu de denedim calıstıramadım yardımcı olacak var mı


Bu mesaja 2 cevap geldi.