Yazar |
|
extreme
Kahramanmaras
admin
Kayıt: 24.10.2006 |
|
C++ da scanf yada cin fonksyonlarıyla degerler okuturken proglemler yaşıyorum.
Örnek olarak string olarak tanımlanmış bir isim degişkenini okuyorum oraya "ahmet mehmet" yazdığımda ahmet'i isim'e atıyor ve sonrasında okuduğum soyisim degiskeninede mehmet atıyor.
a a a a gibi birşey girsem bundan sonra girdiğim 3 deşişkenede a a a atıyor. c de en başından beri böyle bir sorun yaşıyorum nasıl halledebilirim.
özellikle adresin sadece 1 kelimeden oluşması çok saçma.
Exe dosyası http://www.burakamasyali.com/rehberexe.zip
The Man Who Loved Algorithm&Ubuntu.
www.burakamasyali.com
|
|
Yazar |
|
encin
Kayıt: 30.11.2007 |
|
"scanf" fonksiyonunu kullanırken, boşluk tab veya enter tuşuna basılırsa giriş sonlanıyor
kullanıcıdan cümle almak için "gets" fonksiyonunu kullanabilirsin, o zaman sadece enter tuşuyla giriş sonlanır
|
|
Yazar |
|
aliozkn
Manisa
Kayıt: 13.04.2006 |
|
Ben genelde gets kullanıyorum ekrandan girilen boşluklu girdiler için. Bir de eğer belleği temizlemek istiyorsan (yani bellekte kalan verilerin diğer değişkenlerine atanmasını önlemek istiyorsan) flushall() fonksiyonunu kullanabilirsin.
|
|
Yazar |
|
extreme
Kahramanmaras
admin
Kayıt: 24.10.2006 |
|
c++ da <string> olarak tanımlı olan degiskenler gets(),puts(),getch(),scanf vsvs ile okunup yazılamıyor
string adi,soyad; gibi tanımlanıyor ve bildiğim kadarıyla cin, cout ve <<,>> parametreleriyle okunup yazılabiliyor.
benim problemim sadece stringlerde değil int okumam gerekiyor mesela "1 4" girdiğimde birsoraki değişkenede 4 atıyor.
The Man Who Loved Algorithm&Ubuntu.
www.burakamasyali.com
|
|
Yazar |
|
kartane
istanbul
Kayıt: 22.02.2007 |
|
1.dönem c den hatırladığımm kadarıyla şöyle bi şey kullanmıştık:
case' :case' '://bunları veri olarak kabul etme
break;
en basitinden bildiğim kadarıyla:)
|
|
Yazar |
|
clairvoyant
Antalya
Kayıt: 05.05.2006 |
|
STRING sınıfını da kullanıyor olsanız derleyiciden derleyiciye benzer problemler ile karşılaşabiliyorsunuz. Ben fgets fonksiyonundan yararlanarak kendi input fonksiyonlarınızı yazmanızı öneriyorum. Hatta fonksiyonları geliştirerek bir statik kütüphane içinde değişik değişik projelerde kullanabilirsiniz. Ben hep öyle yaparım C ve C++ ile yazdığım konsol uygulamalarında.
Let`s make this world a better place to live !
|
|
Yazar |
|
fonemi
Kayıt: 09.01.2007 |
|
void get_string(char *var, int length) {
int i = 0, j;
int c;
char *retVal;
int a = 0;
retVal = (char *)malloc(sizeof(char) * (length));
while(i <= length) {
c = getchar();
if(i == 0 && c == '\n' && a == 0) {
a = 1;
} else if(c == '\n' || c == EOF) {
break;
} else {
retVal[i] = c;
i++;
}
}
for(j = 0; j < length; j++) {
if(j >= i) {
var[j] = '\0';
} else {
var[j] = retVal[j];
}
}
}
Ben de aynı sorunu yaşamıştım. Yabancı forumlarda falan biraz araştırma yaptığımda bu konuda epey insanın sıkıntıda olduğunu gördüm. Orada yazılanlardan hareketle kendi amacıma uygun olarak sağlam çalışan bir fonksiyon yazmıştım. Belki sizin de işinize yarar. Kullanımı şöyle :
printf("Ad Soyad : ");
get_string(adsoyad, 20);
Görüldüğü gibi ilk parametre, girilen metnin depolanacağı değişken (char * tipinde olmalı), ikincisi ise, girilecek metin için izin verilen maksimum uzunluk. Tabii bazı başka kontroller eklenerek fonksiyon geliştirilebilir. Unutmadan söyleyeyim, bu bir C fonksiyonu. C++ için optimize etmedim. Belki edilmesine gerek yoktur da.
|
|
Yazar |
|
extreme
Kahramanmaras
admin
Kayıt: 24.10.2006 |
|
Bende yazdim bi fonksyon ama satir silen fonksyon lazım içine. Böyle bir fonksyon biliyormusunnuz. cls ile yaptım ama ekranın tamamını silmesini istemiyorum.
void iextreme(int &x){
int sayi=0,toplam=0;
while(1==1){
sayi = getch();
if(sayi==(13)){
toplam *=10;
break;
}
if((sayi==8)){
if(toplam==0)
continue;
toplam = toplam - toplam%10;
toplam = toplam/ 10;
system("cls");
cout<<toplam;
continue;
}
if((sayi-48<0)|(sayi-48>9))
continue;
toplam *=10;
toplam += sayi-48;
system("cls");
cout<<toplam;
}
x = toplam/10;
}
void iextreme(string &x){
string ara,toplam,enter,back;
back = char(8);
enter = char(13);
while(1==1){
system("cls");
cout << toplam;
ara = getch();
if(ara==enter)
break;
if(ara==" ")
ara = "_";
if((ara==back)&(toplam.size()>0)){
toplam.erase(toplam.size()-1,1);
continue;
}
toplam +=ara;
}
x=toplam;
}
The Man Who Loved Algorithm&Ubuntu.
www.burakamasyali.com
|
|
Yazar |
|
clairvoyant
Antalya
Kayıt: 05.05.2006 |
|
extreme yazdi | Bende yazdim bi fonksyon ama satir silen fonksyon lazım içine. Böyle bir fonksyon biliyormusunnuz. cls ile yaptım ama ekranın tamamını silmesini istemiyorum. |
Backspace için 08 hex. ascii karakterini dene. (Ya da "\b")
Let`s make this world a better place to live !
|
|
Yazar |
|
extreme
Kahramanmaras
admin
Kayıt: 24.10.2006 |
|
backspace işe yaramıyor. sadece 1 karakter siliyor
The Man Who Loved Algorithm&Ubuntu.
www.burakamasyali.com
|
|
Yazar |
|
extreme
Kahramanmaras
admin
Kayıt: 24.10.2006 |
|
back sipace silmiyor sadece imlec'i 1 geri getiriyor.
The Man Who Loved Algorithm&Ubuntu.
www.burakamasyali.com
|
|
Yazar |
|
clairvoyant
Antalya
Kayıt: 05.05.2006 |
|
Normalde işe yaraması lazım. Olmazsa araya assembly kodu sıkıştır.
Let`s make this world a better place to live !
|
|
Yazar |
|
mrflz
Luleburgaz
admin
Kayıt: 15.06.2006 |
|
Hocam proje teslim tarihi hakkında kesin bi açıklama yapabilir misiniz?
Başka bir başlıkta 30 Nisan demişsiniz?
Doğru mudur?
I see the ghosts of navigators but they are lost
|
|
Yazar |
|
burakkanmaz
Gaziantep
Kayıt: 02.10.2006 |
|
mrflz yazdi | Hocam proje teslim tarihi hakkında kesin bi açıklama yapabilir misiniz?
Başka bir başlıkta 30 Nisan demişsiniz?
Doğru mudur? |
Bugün bize de söyledi tekrardan. 30 Nisan
|
|
Yazar |
|
mrflz
Luleburgaz
admin
Kayıt: 15.06.2006 |
|
burakkanmaz yazdi |
Bugün bize de söyledi tekrardan. 30 Nisan |
Süper
I see the ghosts of navigators but they are lost
|
|
|
|
-
Del.icio.us
-
Digg
-
Facebook
-
Furl
-
Google
-
Blink
-
Simpy
-
Spurl
-
Y! MyWeb
|
|
| | | | | | | | | | | |