Konuyu görüntüle
IUCODERS FORUM > Duyurular > Okul ile ilgili > C++ - Telefon Rehberi ödevi.
Yazar
extreme


avatar
Kahramanmaras
admin
Kayıt: 24.10.2006
05.04.2008-15:50 #41239
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


avatar

Kayıt: 30.11.2007
05.04.2008-16:07 #41240
"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


avatar
Manisa
Kayıt: 13.04.2006
05.04.2008-16:08 #41241
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


avatar
Kahramanmaras
admin
Kayıt: 24.10.2006
05.04.2008-16:12 #41242
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


avatar
istanbul
Kayıt: 22.02.2007
05.04.2008-16:17 #41243
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


avatar
Antalya
Kayıt: 05.05.2006
05.04.2008-21:17 #41253
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


avatar

Kayıt: 09.01.2007
05.04.2008-22:34 #41258
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


avatar
Kahramanmaras
admin
Kayıt: 24.10.2006
06.04.2008-15:19 #41286
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


avatar
Antalya
Kayıt: 05.05.2006
06.04.2008-15:30 #41287
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


avatar
Kahramanmaras
admin
Kayıt: 24.10.2006
06.04.2008-15:40 #41289
backspace işe yaramıyor. sadece 1 karakter siliyor





The Man Who Loved Algorithm&Ubuntu.
www.burakamasyali.com





Yazar
extreme


avatar
Kahramanmaras
admin
Kayıt: 24.10.2006
06.04.2008-15:44 #41290
back sipace silmiyor sadece imlec'i 1 geri getiriyor.skullangrysick





The Man Who Loved Algorithm&Ubuntu.
www.burakamasyali.com





Yazar
clairvoyant


avatar
Antalya
Kayıt: 05.05.2006
06.04.2008-15:51 #41292
Normalde işe yaraması lazım. Olmazsa araya assembly kodu sıkıştır. silly





Let`s make this world a better place to live !

Yazar
mrflz


avatar
Luleburgaz
admin
Kayıt: 15.06.2006
21.04.2008-20:33 #43095
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


avatar
Gaziantep
Kayıt: 02.10.2006
21.04.2008-20:37 #43096
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 wink





Yazar
mrflz


avatar
Luleburgaz
admin
Kayıt: 15.06.2006
21.04.2008-20:48 #43098
burakkanmaz yazdi
 

Bugün bize de söyledi tekrardan. 30 Nisan wink


Süperdancingdancingdancinglove struck





I see the ghosts of navigators but they are lost







1 2 3 4 5 6 7
Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb