C programlama ad ve soyadı sırayla yazdırmak

Katılım
12 Aralık 2015
Mesajlar
4.036
Makaleler
7
Çözümler
8
Ad-Soyad:
#include <stdio.h>

int main() {
  
    char ad[15];
    char soyad[15];
    int sayac=0;
  
    if (sayac==0) {
  
    printf("Adinizi girin...");
    scanf("%[^\n]",ad);
    sayac++;
  
    }
  
    else if (sayac==1) {
  
    printf("Soyadinizi girin...");
    scanf("%[^\n]",soyad);
    sayac++;
  
    }
  
    else if(sayac==2) {
  
    printf("Adiniz ve soyadiniz kaydedildi.");
  
    printf("%c %c",ad,soyad);
  
    }
  
    return 0;
}

Yapmak istediğim şey ad ve soyadı sırayla kullanıcıdan alıp yazdırmak. Birkaç deneme yaptım ama printf ile her şey aynı anda yazılıyor. If, else vs. ile yapmak aklıma geldi ama ilk koşul hep true olduğu için bununla da yapamadım. Aklıma şu an bir şey gelmedi. Hazıra konmak gibi bir amacım yok. oldukça acemi bir C programlama öğrencisiyim diyebilirim. Direkt cevap yerine herkes için daha öğretici, sorgulayarak şunu şunu yapabilirsin vs. gibi tüyolar verilmesi daha iyi olur. Bunlarla bir neticeye ulaşamazsam da sizlerden daha somut yardım istemek zorunda kalacağım. Şimdiden teşekkürler.
 
Son düzenleyen: Moderatör:

M.Sc Jelly Bean

Gigapat
Katılım
2 Mart 2014
Mesajlar
6.050
Çözümler
103
Yer
Master Boot Record
Döngü olmadığı için sayacın değeri 0'dan başlayıp sadece ilk if'in içerisine giriyor. Main altındaki tüm kodun bir while veya for döngüsü içerisine alıp sonlandırma şartının ise sayacın 2 olmasına bağlayabilirsiniz.

Döngüsüz olması içinse if'leri kaldırabilirsiniz. O zaman sayaca da gerek kalmıyor haliyle.
 

M.Sc Jelly Bean

Gigapat
Katılım
2 Mart 2014
Mesajlar
6.050
Çözümler
103
Yer
Master Boot Record
C'nin belki de yumuşak karnı olan String'ler her zaman sıkıntı yaratmıştır.
scanf stringler için görece yetersiz bir fonksiyon. Güvenlik sorunları ile meşhur olsa da gets() kullanabilirsiniz. Kendisinin s_gets(), gets_s() gibi günvenli versiyonları da mevcut ancak Standart C Lib içerisinde var mı emin değilim.
 

sSLH

Decipat
Katılım
7 Mayıs 2020
Mesajlar
671
Çözümler
22
Yer
Mersin
Herkes bir şeyler söylemiş söyledikleri kısmen doğru ama konuyla alakalı mı tartışılır; hadi benim senin kodlarını düzenlediğim haline bakalım.

Kodlar:
#include <stdio.h>

int main() {
 
    char ad[15];
    char soyad[15];
    int sayac=0;
 
    if (sayac==0) {
 
    printf("Adinizi giriniz: ");
    scanf("%s",ad);
    sayac++;
 
    }
 
    if (sayac==1) {
 
    printf("Soyadinizi giriniz: ");
    scanf("%s",soyad);
    sayac++;
 
    }
 
    if(sayac==2) {
 
    printf("Adiniz ve soyadiniz kaydedildi.\nAdiniz Soyadiniz: ");
 
    printf("%s %s",ad,soyad);
 
    }
 
    return 0;
}

Şimdi öncelikle else ifleri' direkt olarak if'e çevirdim çünkü else kelime anlamı gibi "değilse" anlamına geliyor ve "değilse eğer" gibi bir anlam katıyor, baştaki if bloğu geçerli olduğu için yani if true sorgu ürettiği için diğer sorguları yapmadan geçiyor yani o satırları atlıyor. Direkt olarak if'e çevirmek gerekli. (İlle karar yapısı yapmak istiyorsan yoksa bunu kullanmadan da direkt olarak yapabiliriz.)

İkinci olarak senin değişkenlere atfetmiş olduğun yapı olan "%[^\n] " yapısı;

C'deki %[^\n] ifadesi genellikle tüm satırı okumak için kullanılır.
Diyelim ki scanf(“%[^\n]”, x);
Böylece yukarıdaki talimat, dosyanın (EOF) veya \n(sonraki satır) sonuna ulaşana kadar tüm karakterleri okuyacak ve x'e koyacaktır ama buna gerek var mı sence? Bence hayır onları da string ifadenin türünü belirten "s" ile değiştirdim.

En alta geldiğimizde sen printf ile ad soyadı yazdırmak isterken "%c" kullanmak istemişsin, c harfi char türünü sembolize eder char ise karakterleri yani 'A' bir chardir "A" ifadesi ise bir string değerdir, char tek bir değer alırken string değeri birden fazla karakter alabilir "aa" gibi bu yüzden %c yerine %s kullanmamız gerekli aksi halde %c ekrana veri yazdırmayacaktır.


Tüm bunlardan bağımsız aslında şu şekilde çalıştırabilirsin clean code mantığı burda devreye giriyor.

C:
#include <stdio.h>

int main() {
 
    char ad[15];
    char soyad[15];
 

    printf("Adinizi giriniz: ");
    scanf("%s",ad);
    printf("Soyadinizi giriniz: ");
    scanf("%s",soyad);
    printf("\n\nAdiniz ve soyadiniz kaydedildi.\nAdiniz Soyadiniz: ");
    printf("%s %s",ad,soyad);
  
    return 0;
}
 
Son düzenleme:
Yukarı