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:
|
isdigit() fonksiyonunu kullanabilirsin.Fonksiyonu kullanmak için ctype.h kütüphanesini include etmelisin. Örnek bir uygulama yazdım. #include <stdio.h> |
teşekkürler. |
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. |
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> 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. |
C# da bilgili, bi soru hakkında yardımcı olabilicek birisi varmı acaba? |
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 |
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ı?
|
%u yerine %f kullanırsanız sorun çözülecektir. %u unsigned veri tipleri için kullanılabilir. |
İ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. |
Çok teşekkür ederim. :D Doğru söylüyorsun. Çalıştı. Daha çok yeniyim de bu işlerde. |
Ö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. |
dev c++ programının son sürümünü yükleyebilceğim bi kaynak yollayabilirmisiniz pm den |
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 ? :) |
https://forum.donanimhaber.com/showTopic.asp?m=83179572 |
@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. |
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ı |
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. Cevapları Gizle
Bu mesajda bahsedilenler: @Mtntk , @-Source-