Şimdi Ara

Scanf boşluk sıkıntısı C

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
8
Cevap
0
Favori
2.969
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • 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?







  • cwr kullanıcısına yanıt
    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
  • 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
  • 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?
  • Özür dilerim aklım başka yere kaymış hatalı cevap o.
  • 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
  • cwr kullanıcısına yanıt
    Ç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?
  • cwr kullanıcısına yanıt
    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
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.