Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
7
Cevap
3077
Tıklama
0
Öne Çıkarma
Scanf boşluk sıkıntısı C
T
10 yıl
Yüzbaşı
Konu Sahibi

Structure yapısıyla birlikte dizi kullanıyorum. Char kullanarak isim almasını istiyorum, float kullanarak vize notu girmesini istiyorum vs ve for döngüsünde her öğrenci için ayrı ayrı uyguluyo program. Sorunum şu ki scanfle isim aldığımda boşluk olursa arasında sürekli alttaki while döngüsünün içindeki yazıyı yazdırıyo sayfalarca. Biraz bakındım gets kullanın demiş;

    struct OGRENCI{ 
int No;
char Adi[22];
float Vize;
float Final;
float Odev1;
float Odev2;
float Devamsizlik;
float NotOrtalamasi;
char Durum[6];
int DevamsizlikYuzdesi;
} deger[n];

for(int i=0;i<n;i++) {
printf("Ogrenci adini giriniz: "); gets( deger[i].Adi );
printf("Ogrenci vize notunu giriniz: "); scanf("%f",&deger[i].Vize);
while(deger[i].Vize<0 || deger[i].Vize>100){
printf("Lutfen vize notunu 0 ile 100 arasinda seciniz.\n");
scanf("%f",&deger[i].Vize);}
}

(Programın bi kısmının kodu)

Bu şekilde kullandığımdaysa gets'i program görmüyo ve direk vize notunu istiyo. Yazımda mı bi hata var yoksa structure yapısıyla mı böyle kullanılmıyo anlayamadım. İsim girerken boşlukta koyabilmesi için kullanıcının ne yapmam gerekir, ne önerirsiniz?



T
10 yıl
Yüzbaşı
Konu Sahibi

fgetsle denediğimde de aynı olay oluyo ya hani direk öğrenci adını giriniz diyo yanına da vizeyi giriniz yazıyo hiç istemiyo değer


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @cwr
C
10 yıl
Yarbay

quote:

Orijinalden alıntı: tes1907

fgetsle denediğimde de aynı olay oluyo ya hani direk öğrenci adını giriniz diyo yanına da vizeyi giriniz yazıyo hiç istemiyo değer

Atma imkanin varsa programi atsana direkt inceleyeyim



T
10 yıl
Yüzbaşı
Konu Sahibi

Denedim ama yine aynı sonucu verdi. En son çare olarak Adi Adi2 ve Soyadi şeklinde ayırayım dedim. Eğer ikinci adı yoksa . giriniz diyip en sona

if(deger[n].Adi2 == '.'){
...
} şeklinde yapayım dedim ama o da olmadı . olsa da değer if'in içine girmedi bi türlü. Başka aklınıza gelen bi yol yok mudur ya?


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @elektro_gadget
G
10 yıl
Yarbay

Özür dilerim aklım başka yere kaymış hatalı cevap o.


Bu mesaja 1 cevap geldi.
C
10 yıl
Yarbay

Ogrenci adini girin'i yazdirdigin printf'den once bir adet getchar() koy, ogrenci adini da atadigin scanf'i asagida belirttigim sekilde duzelt. Bu sekilde calismasi lazim;

getchar(); 
printf("Ogrenci adini giriniz: "); scanf("%[^\n]", deger[i].Adi); //Ogrencinin adini alir


Bu mesaja 2 cevap geldi.

Bu mesajda bahsedilenler: @tes1907
T
10 yıl
Yüzbaşı
Konu Sahibi

Çok teşekkürler ya çalıştı, bu yazdığın şekilde scanf denemiştim ama getchar koymamıştım. Tam olarak olayı nedir onu da açıklarsan çok sevinirim?




Bu mesajda bahsedilenler: @cwr
S
5 yıl
Er

Hocam çok sağ olun saatlerce buna uğraştım gets kullanınca oluyor ama soruda c99 da mı öncesinde mi ne gets çalışmadığı için geçersiz kabul ediyor
sırf size teşekkür etmek için hesap açtım :D




Bu mesajda bahsedilenler: @cwr
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.