fonksiyon kendini bosluk karakterini bulana kadar tekrar cagırıyor boylece harf harf karakterleri almıs oluyor(bufferdan) daha sonra icten dışa doğru yazdırıyor |
kullanıcı pozitif tamsayı girecek, program bu sayının bütün asal çarpanlarını bulup, diziye atayacak SORUMA YARDIMCI OLABİLİR MİSİNİZ? :(( |
Merhaba, Yapamadığınız kısım neresi, orayı yazarsanız o şekilde yardımcı olalım. Yoksa direkt bizim yapıp size kod vermemiz size bi'şey kazandırmaz. |
Kardeşim burada senin sorunun python ile gerçeklemesi var. Fikir edinmek için bakabilirsin.
|
integera atadığımız sayıyı geçersiz kılıp tekrar scanf ile değer almak için ne önerirsiniz ? bir menü yazıyorum c ile 0 1 2 3 4 den birini girecek kullanıcı switch case kullanıyorum. default içine goto ile döndürme yapıyorum ama sürekli yazıyor çünkü en başta girilen değeri silmeden o satıra geliyor ne önerirsiniz? |
Oncelikle goto kullanmayin, 1970 yilindan once kullanilan birsey o. Onun yerine while kullan. Atiyorum char girdi; while(1) { girdi = getchar(); //Switch burda if (girdi == CIKIS) { break;} } CIKIS ile bahsettigim cikis yapilcak girdi yani atiyorum 0 ile cikis yapiyorsan '0' yazmalisin. |
fflush() ile yaptim orayi ama su anda vaska bir sorunum var case icinde case yazarak yes or no y/n ile cikis veya devam etme yapmam lazim yes dersem cikacak no dersem goto ile donecek, goto yerine naparim burda case icinde case surekli hata veriyor mobilim yarin detaylica sorucam sagolun |
Ilk mesajimda yazdigim gibi, goto yerine while loop kullanabilirsin. case icinde case yazilmaz. Switch kullaniyorsan caseler sade birsey olmali. Eger sade degilse, if else vs kullanmalisin. |
goto hala kullanılıyor, ve kullanılması gereken yerde sırf kulaktan doğma "goto kullanmayın" dendiği için kullanmamak saçma. Tamam mümkün olduğunca kullanmamak gerekir ama "goto kullanmayin, 1970 lerden önce kullanılan birşey" demek de yanlış. for (;;) for (;;) for(;;) if (....) break; // Bütün döngülerden çıkmak istiyorum. Bir sürü flag mi tutacağım? if (p1 = malloc...) { ... if (p2 = malloc...) goto BIR; if (p3 = malloc...) goto IKI; if (p4 = malloc...) goto UC; . . . //en son yer tahsisi başarısız olursa öncekileri free etmek gerekir. Tipik go to nun kullanıldığı durumlardan bir başkası. UC: free p3; IKI: free p2; BIR: free p1; |
Yardim edebilcek yol gosterebilicek kimse yok mu arkadaslar ? |
goto hala kullanılıyor olabilir ama bu hatalı olduğu gerçeğini değiştirmez. Çok ilkel kodlarda kullanılmış ve günümüze kadar gelmiş ama şu anda tam bir acemi işi goto. O içiçe for örneğinde o kısmın ayrı bir işlem olduğu ve başka bir fonksiyona taşınması gerektiği anlaşılıyor. Yani çıkma işini return ile yapacaksın. Bellek tahsisi olayında da eminim daha iyi yöntemler bulunur. Tabi isteyen kullansın ama ben her zaman alternatif yöntemlerden yanayım. |
goto kullanmanın hata olduğunu düşünmüyorum. Yeni yazılan kodlarda da gördüm eskilerde de. Başka örnekler verilebilir ama yazdığım örneklere cevap verdiğiniz için bana da söz hakkı doğdu ![]() Döngülerde ayrı bir işlem olsa bile döngü çıkışında başka işlemler yapılabilir, ayrı fonksiyona taşınmayabilir... gibi gibi Tekrar söylemek gerekir örneklerden de anlaşılacağı gibi kullanımı kısıtlı ama kullanılmasının tavsiye edildiği ya da okunabilirlik açısından yanlış kabul edilmediği yerler de var. Kullanmamak gerekir ama kullanılmasının gerektiği yerlerde de kullanmamak bana göre yanlış. |
for (;;) Hayir, hatta bazi kod style larinda break bile yasak olabilir. Ben her zaman sunu yaparim: for (i=0;i<5;i++) gordugun gibi flaga falan gerek yok, e kodun geri kalaninin calismasini istemiyorum dersen ardina bir tane else koyarsin olur biter. Ikinci ornegini tam anlamadim, if in icindeki malloc hata donerse, geriden mi free ederiz mantigi var? Eger durum boyleyse bunlari en basitinden bir arrayde tutup en son eklenenden geriye free ederiz(aklima ilk gelen bu) |
Yazdıklarınız doğru ama zaten bildiğiniz gibi birşey in programlama da tek yöntemi yok, birden fazla seçenekle yapılabilir, benim de demek istediğim özel bir neden (mesela bazı code stillerinde yasak demişsiniz, burda kullanmazsınız) yoksa goto okunabilirliği bozar ama "kodumda hiç goto kullanmayacağım" diye düşünmekte biraz yanlış geliyor bana. Belirli yerlerde kullanılır. |
Arkadaşlar aşağıdaki ufak eurodan tlye tlden euroya dönüştüren program çalışıyor tek bir sorunla oda işlemleri yaptıktan sonra en son siyah ekranda değerler çıkar çıkarmaz kapanıyor direk kapanmaması için kullanılan kod cin.get(); değilmiydi teşekkürler şimdiden #include <iostream> #include <iomanip> #include "locale.h" using namespace std; int main() { double a=0,b=0; setlocale(LC_ALL,"turkish"); cout<<"liradan Euroya dönüştürülecek sayıyı girin"; cin>>a; double c=a/2.79; cout<<a<<' '<<"lira"<<' '<<c<<' '<<"Euro eder"<<endl<<endl; cout<<"Eurodan Liraya dönüştürülecek sayıyı girin : "; cin>>b; double d=b*2.79; cout<<b<<' '<<"Euro"<<' '<<d<<' '<<"Lira eder"; cin.get(); return 0; } |
programlama konusunda acemiyim. yaptığım bazı programlarda switch döngüsünün seçim değişkenine, kullanıcı birden fazla kez aynı karakteri girse dahi çalışsın istiyorum. bu bir hata mesajı da olabilir. fakat beceremedim bir türlü. yani aslında 5+5 yazınca =10 yazan program 5+++5 yazınca sonsuz döngüye girmesin, hatalı girdin arkadaşım desin ve olayı tekrar başa alsın istiyorum. Bu şekilde bir taşma durumunda ne yapabilirim? veya bir reset komutu verebilir miyim? birçok şey denedim çözemedim. //örnek kod: program üzerinden açıklarsanız daha iyi anlarım. teşekküreler ![]() |
İyi günler. Goto komutu ile ilgili ödevim var ama pek bilgim yok. Goto işlevini gören farklı yöntemler oldugu için pek kaynakta edinemedim. Acaba kullanımı hakkında bilgi verir misiniz? Ödevim şu: 1- Klavyeden girilen 10 sayının toplamını ve ortalamasını bulan program + akış diyagramı… 2- 1-50 arasındaki tek sayıları ekrana listeleyen ve toplamını bulan program + akış diyagramı… Ödevin çözümünü istemiyorum. Sadece çözümünde katkısı olacak goto komutu hakkında bilgi. Goto komutunu kullnarak belirli sayıda sayı girmeyi beceremiyorum. Hep sonsuz oluyor. Yardımcı olursanız çok iyi olur. Şimdiden teşekkürler. |
Yanlış anlaşılma volume 1 ![]() goto kullanmayacaksınız döngülerden yararlanacaksınız. 1 - 50 arasındaki tek sayılar. for (i = 1; i < 50; i += 2) printf("%d ", i); gibi |
switch i döngü içine alırsınız. Gerekli koşullara bakarsınız ona göre çıkmak istediğinizde break; dersiniz. |
Bu mesaja 1 cevap geldi. Cevapları Gizle
Bu mesajda bahsedilenler: @Seikatsu