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

Herşey aynı anda yazıyor ne demek?
 
Neden if kullandığınızı anlamadım ve neden kızgın attınız kod doğru çalışıyor.


Eğer if else kullanmak istiyorsanız daha iyi örnekler de var.
 
Arkadaşlar benim attığım kodu kopyala yapıştır yapıp Dev C++ ile çalıştırınca ilk scanf adı aldıktan sonra soyad için olan scanf çalışmıyor ve diğer 2 printf de çıktı veriyor. Görsel ile de göstereceğim ancak şu an evde değilim. En kısa zamanda cevaplayacağım. Herkese çok teşekkürler her mesajı uygulayıp yanıtlayacağım.

If else if kullanma sebebim de bundan ötürü. Yani printf'lerin aynı anda cıktı vermemesi için deneme yaptım ancak olmadı mantıksızlık olsu ilk koşulda.
 
Ya canım kardeşim, kusura bakma lütfen technopatta 570. mesajımda ilk defa bu uslübü kullanıyorum; upp uzun bir şekilde makale gibi yazdım sana sebeplerini nedenleri ve sonucu nasıl düzelteceğini ve düzeltilmiş halini de, naiden kâileye almıyorsun, soyad için olan scanf çalışmıyor diyorsun çünkü ilk if true üretirse else iflere bakmaz, ilk if false üretirse else if'n en baştakine bakar o da false üretirse bi' altına ama bi' altında ki true üretirse onunda bi' altına bakmaz, daha kaç defa yazmam gerekiyor acaba?
 
Dostum tüm mesajları okudum ama elimde PC yok şu an. Ne yazmışım üst mesajda ? Herkese cevap vereceğim PC'ye ulaştığımda. Okudum mesajları ama denemedim hiçbir şey. Çok açık yazdım halbuki sizin de anlamanız lazımdı kimseyi görmezden geldiğim yok.

Birçok kişi neden if else kullandığımı sormuş kısaca bunu açıkladım. Neyin eksik olduğunu bir kez daha belirttim bazı şeyler tam anlaşılmamışsa diye.
 
Birkaç tiyo vereyim, herhangi bir değişken veya dizi tanımladığında eğer bu dizi veya değişkene ilk değerlerini vermezsen rastgele değerler alırlar, bu da yazdığın kodun çalışma zamanında saçmalamasına neden olur (Ayrılan belleklerin heap veya stack farketmeksizin içinde veri saklanıyor olabileceğini aklından çıkarma, ek olarak "undefined behavior" kavramını araştır).

örnek:
C:
int x; (bad)
int x=0; (good)

C:
(bad)
char soyad[15];
scanf(" %s", soyad);

(good)
char soyad[15];
memset(soyad, 0, 15);
scanf(" %s", soyad);

Ayrıca "stack overflow" vs. gibi kavramları araştır, bu gibi durumlara nelerin sebep olduğunu iyice öğren, güvenli kodlama tekniklerini araştır. Fonksiyonların parantez içlerini boş bırakma, main() demek ben parametre almıyorum demek değil, bunun anlamı bir parametre de alabilirim birçok parametre de, main(void) şeklinde kullanabilirsin.

Eğer standart library'den bir fonksiyon kullanıyorsan, bunun manuel'ini oku, hangi parametreleri nasıl alıyormuş, hangi durumda ne döndürüyormuş?

Örneğin scanf() fonksiyonunun prototipi; int scanf ( const char * format, ... ); burada fonksiyon bir tamsayı döndürüyor, döndürdüğü sayıların ne olduğunu ve ne için kullanıldığını araştır. Fonksiyonun ilk parametresi format adında bir sabit karakter dize işaretçisi, bizden ne istediğini araştırmamız lazım. İkinci parametrede ise elipsis dediğimiz bir işaret var, bu ise fonksiyonun birçok parametre alabileceğini söyler (preprocessor, variadic macro kavramlarını araştır).

Gelelim senin sorununa, yukarıda da dediğim gibi format specifier'leri yanlış kullanıyorsun, eğer string yazdıracaksan veya alacaksan "%s" kullanırsın, eğer scanf fonksiyonunu arka arkaya kulanacaksan (spaces, newline and tab characters vs.) gibi önceki satırdan kalan artıkları esgeçmen lazım, aksi halde fonksiyon bunları da hesaba katıp saçmalayabilir, bunun için de format specifier'in başına bir boşluk ekliyoruz " %s", bu negated scanset formatı için de böyle.

Koşullu ifadeler vs için birşey söylememe gerek yok, arkadaşlar zaten yeterince izah etmiş ve sen de ne yağtığının farkındasın. Bu ve bunun gibi birçok ayrıntı var, bunları da zaten zamanla öğrenirsin, takıldığın yer olursa konusunu açarsın, yardımcı oluruz.
 
Clean Code dediğiniz kısmı Dev C++ çalıştırmıyor hocam.


Hocam çok sağ olun dedikerinizi sindirerek deneyeceğim ve dikkate alacağım. Sorun da tüm koşulları ''if'' yaparak çözüldü @saliholoji dediği gibi.
Karar yapısı kurmana gerek yok. Önce printf ile ad isteyip scanf ile taratıp, ardından printf ile soyad isteyip scanf ile taratabilirsin.
Bu şekilde olunca ad girdikten sonra soyad ve ad-soyad hepsi aynı anda yazmış oluyor ancak.
If olmadan nasıl olacak hocam ? Yani bütün printf'ler bir anda çıktı veriyor bu şekilde.
Yapı yanlış. Karar yapısına gerek yok. Alt alta yazdırma işlemi yaparsan sorun olmaz.
Hocam alt altadan kasıt if vs. olmadan mı ? Yukarıdaki iki mesaj için de aynı şeyi yazdım. Tüm printf'ler aynı anda çıktı veriyor dediğiniz şekilde.
Arkadaş neden if kullanmış ben anlayamadım. Bilen birisi varsa söyleyebilir mi?
Birçok kez cevap verdim ama sebebi şu: tüm printf'ler aynı anda çıktı vermesin diye deneme yaptım sadece ve else if kullanmadan tüm koşulları if ile yapınca çözüme ulaştık.
Neden if kullandığınızı anlamadım ve neden kızgın attınız kod doğru çalışıyor.
Eki Görüntüle 1233712

Eğer if else kullanmak istiyorsanız daha iyi örnekler de var.
Hocam ben kızgın atmadım. If kullanma sebebim aynı anda printf'lerin çıktı vermemesini istemem.
 
Son düzenleme:
Birebir aynen kopyalayıp yapıştırırsan çalışıyor, tekrardan denedim bi' sorun yok.

Eki Görüntüle 1234313
Hocam son olarak bu kodda scanf'ler için sadece ''%s'' yerine ''%[^\n]'' kullanınca tüm printf'lerin aynı anda yazdırma sebebi nedir ? Bunun sebebini de anlarsam içim rahat edecek. Demek istediğim ve herkesin sorduğu aynı anda prinf'lerin yazması dediğim olay bu:

 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…