[Çözüldü] Yanlış seçenek seçilmesi durumu

Başlatan shigej38, 26 Kasım 2019 - 09:42:39

« önceki - sonraki »

0 Üyeler ve 2 Ziyaretçi konuyu incelemekte.

shigej38

Merhabalar arkadaşlar bi script hazırlıyorum. Bu scriptte kullanıcan "read" komutu ile girişler alarak yapmak istediği işlemi seçmesini sağlıyorum. ancak sunduğumun dışında bi seçenek girerse hata alıp kapanıyor else bloğu ile tekrardan başlatabilirim ancak uzun bi iş oluyor kullanıcı için bu durumu nasıl düzeltebilirim. istediğim olay şu yanlış seçenek geldiği zaman soruyu tekrar sormasını istiyorum. bu mümkün mü?

nebula

case 'yi biraz araştır derim.
hatta case 'yi kavradıktan sonra select de çok işlevsel.
...
Kendi kendimizle yarışmadayız, gülüm.
Ya ölü yıldızlara hayatı götüreceğiz,
Ya dünyamıza inecek ölüm. -N.H.R.-

lnxdev

Kullandığın dili yazsaydın daha iyi olurdu. Farz edelim ki python.

print("Girdi: ")
girdi = input()
while(girdi != "cikis"):
    print("yanlis bir secim yaptiniz\n")
    print("Girdi: ")
    girdi = input()
# buradan sonrası doğru seçim yaptıtkan sonra yapılacak işlemler

shigej38

Cevaplar için teşekkür ederim.

case yapısı yerine if elif else yapısını kullanıyorum hemen hemen aynı şeyleri yapıyorlar. case yapısında da yanlış seçenek esnasında hata mesajını verip kapatıyor script kendisini ben bunu istemiyorum ama aynı soruyu tekrar sormasını istiyorum.

dil olarak bash kullanıyorum yapacağım işlem için döngü kullanamam çünkü tek seferlik verilen kararlar sonucunda bir dosyası çalıştıran bir script yazıyorum.

bunu şöyle düşüne bilirsiniz bir sonu soruyor 2 dala ayrılıyor her dalda farklı 5-6 soru daha ordan da 6şar soru bu yüzden kullanıcı son aşamada hata yaparsa bile başa dönüyor bunu istemiyorum ben bunu düzeltmemin bi yolu varmı?

diyelim 6 seçenekli bir soru var 1den 6a kadar numaralandırıldı kullanıcı 7 basınca yani else bloğu çalışınca tekrar soruyu sorsun  bunu aynı blokları iç içe yazarak yapabilirim ama saçma olur oda

nebula


Alıntı yapılan: shigej38 - 26 Kasım 2019 - 17:01:25
Cevaplar için teşekkür ederim.

case yapısı yerine if elif else yapısını kullanıyorum hemen hemen aynı şeyleri yapıyorlar. case yapısında da yanlış seçenek esnasında hata mesajını verip kapatıyor script kendisini ben bunu istemiyorum ama aynı soruyu tekrar sormasını istiyorum.

dil olarak bash kullanıyorum yapacağım işlem için döngü kullanamam çünkü tek seferlik verilen kararlar sonucunda bir dosyası çalıştıran bir script yazıyorum.

bunu şöyle düşüne bilirsiniz bir sonu soruyor 2 dala ayrılıyor her dalda farklı 5-6 soru daha ordan da 6şar soru bu yüzden kullanıcı son aşamada hata yaparsa bile başa dönüyor bunu istemiyorum ben bunu düzeltmemin bi yolu varmı?

diyelim 6 seçenekli bir soru var 1den 6a kadar numaralandırıldı kullanıcı 7 basınca yani else bloğu çalışınca tekrar soruyu sorsun  bunu aynı blokları iç içe yazarak yapabilirim ama saçma olur oda

Böyle kodu göstermeden edebiyat ile scripting mantık sorusu sorulduğunda, anlaşılabilmek okuyucunun hayal gücü veya yakında benzer bir sorunla karşılaşıp karşılaşmamasına fena halde bağımlı kalıyor, onu bir belirteyim.


case $aa in
sec1)
...
;;
sec2)
...
;;
*) ...
;;
esac


bu kodda $aa nın değeri "sec1" veya "sec2" değil ise *) 'a yükleyeceğiniz şeyi yaptırır. hata vermez.
...
Kendi kendimizle yarışmadayız, gülüm.
Ya ölü yıldızlara hayatı götüreceğiz,
Ya dünyamıza inecek ölüm. -N.H.R.-

mhmtkrktr

Hatalı girişte script devam etmeyecekse exit deyip çıkabilirsin. Yok script devam etsin istiyorsan en makul uygulama, döngü kullanıp break ile script yerine döngüyü sonlandırmak olur sanıyorum.

shigej38

arkadaşlar kodlarım şu şekilde

https://paste.ubuntu.com/p/7wQWNcpVFR/

benim istediğim olayı anlatamadım sanırım case kalıbı ile hata vermiyor tamam ama işleme devam etmek için tekrardan scripti çalıştırmak gerekiyor. uzun adımlar söz konusu olduğundan dolayı kullanıcıyı uğraştırmak istemiyorum. onun için sunduğum seçenekler haricinde bir seçenek seçildiğinde aynı soruyu tekrar sorsun istiyorum.

nebula

echo bir sayı girin
read za

function aa () {
echo tekrar girin
read za
bb
}

function bb () {
if [ $za -le 2 ]; then
echo lala
else
aa
fi
}

bb


0, 1 ve 2 girişine "lala" döner, yukarısına tekrar sorar. Böyle mi bir düzenek istiyorsunuz?
...
Kendi kendimizle yarışmadayız, gülüm.
Ya ölü yıldızlara hayatı götüreceğiz,
Ya dünyamıza inecek ölüm. -N.H.R.-

mhmtkrktr

#8
#!/usr/bin/bash

function questions()
{
local TOUR=$1
local EXT=$2
local TR=1
local MS='-- Bir sayı seçiniz : '
shift 2

while :
do
echo -n "$MS"
read -n 1 ; ANSWER=$(tr -cd '[0-9]' <<<$REPLY)
test $REPLY && echo

if [[ -n $ANSWER ]]
then
if (( ANSWER == EXT )); then echo "-> işlem iptal edildi"; exit ; fi

if grep -q " $ANSWER " <<<" $@ "
then break ; else MS="-> Seçim geçersiz, tekrar seçiniz : " ; fi
else
MS="-> geçerli bir sayı seçiniz : "
fi
TR=$((TR+1)) ; if ((TR > TOUR)); then echo "-> senin seçeceğin sayının ben .."; exit; fi
done
  }

  echo "--> falanca işlem yapılacak"

  questions 3 0 1 2 3

  case $ANSWER
  in
  1) echo "-> '1' seçildi" ;;
  2) echo "-> '2' seçildi" ;;
  3) echo "-> '3' seçildi" ;;
  esac

  echo "--> filanca işlem yapılacak"

  questions 2 0 1 2 3 4

  case $ANSWER
  in
  1) echo "-> '1' seçildi" ;;
  2) echo "-> '2' seçildi" ;;
  3) echo "-> '3' seçildi" ;;
  4) echo "-> '4' seçildi" ;;
  esac


questions 3 0 1 2 3 4
(3) ilk sayı = kaç defa yanlış giriş yapılabilir
(0) ikinci sayı = iptal için kullanılacak rakam
(1 2 3 4) = seçimde geçerli olacak rakamlar

nebula

@mhmtkrktr hocam maşallah framework yazar gibi... :) Eski bilgisayarımda zilyon tane yarım kalmış, insanın ruhunu emen, tır çevirir gibi genişten genişten alınmış uygulamacık yazma teşebbüsü var, fake kullanıcılar açıp biraz da dramatik anlatım katıp buralarda yeni başlıklar mı acsam napsam... :P
...
Kendi kendimizle yarışmadayız, gülüm.
Ya ölü yıldızlara hayatı götüreceğiz,
Ya dünyamıza inecek ölüm. -N.H.R.-

shigej38

[mention=650369]@mhmtkrktr[/mention]

maşallah hocam kodu anlamak için biraz uğraşmam gerekiyor teşekkür ederim