2012-03-27 3 views
1

У меня возникла логическая проблема с моей игрой для подсчета номеров в UNIX. Система меню работает просто отлично (1 для игры, 2 для выхода, защитный ответ в противном случае). Но как только в игре я получаю выход следующим образом:UNIX Number Guessing Game - Logic Issue

  1. ВАРИАНТЫ:
  2. (1. Play)
  3. (2. Выход)
  4. Введите номер 1 или 2.
  5. Пожалуйста, введите, что вы думаете.
  6. pgm01 [43]: [5: не найдены [Нет такого файла или каталога]
  7. pgm01 [47]: [5: не обнаружено [Нет такого файла или каталога]
  8. Yay !! ! 5 - правильный номер !!!
  9. Ваше общее число попыток было 0.

Вот код (FYI это в KSH оболочки). Я предполагаю, что у меня есть какая-то ошибка синтаксиса где-то ...

#!/bin/ksh 
    # CS2351 - UNIX Programming 
    # Program 1 

    x=$RANDOM%100+1 
    tries=0 
    guessInt=0 
    userOption=0 

    while ((1==1)) 
    do 
    print "Welcome to the UNIX Number Guessing Game!" 
    print "A random number between 1 and 20 has been selected." 
    print "===========\nDirections: \n===========" 
    print "1. Enter your guess. The program will tell you if it is high or low." 
    print "2. The program will tell you if it is high or low." 
    print "3. Change your guess." 
    print "4. The computer will tell you how many guesses you had." 
    print "=======\nOPTIONS\n=======" 
    print "1: Play \n2: Exit" 
    print "Enter number 1 or 2." 

    "Enter number 1 or 2." 

    read userinput 
    case "$userinput" in 

    1) 
     break;; 
    2) 
     print "Quitting program!!!" 
     exit;; 
    *) 
     print "The input $userinput is invalid." 
     print "Returning to main menu..." 
     print "\n\n\n";; 
    esac 
    done 

    print "Please enter you're guess." 
    read guessInt 
    while (($guessInt != "q")); 
    do 
    if [$guessInt -lt $x]; 
    then 
     print "Your guess is too low, try again! (q to quit)." 
     tries=tries+1 
    elif [$guessInt -gt $x]; 
    then 
     print "Your guess is too high, try again! (q to quit)." 
     tries=tries+1 
    else 
     print "Yay!!! $guessInt is the right number!!!" 
     break 
    fi 
    done 

    print "Your total number of tries were $tries." 
    exit 

Любое понимание этого вопроса ценится!

ответ

1

Насколько я могу судить, вам нужны двойные скобки для условных чисел, а некоторые пробелы значительны. Вам нужно что-то вроде:

if [[ $guessInt -lt $x ]]; then 

tries также должны начинаться с 1, так как нет никакого способа, вы можете выиграть не догадываясь первый.

Вы также должны прочитать guessInt внутри цикла while, если их предположение неверно, потому что, если вы ошибаетесь в первый раз, оно будет просто повторяться навсегда (так как значение $guessInt не изменяется между итерациями цикла) ,

Посмотрите на these shell script syntax examples; у него много материала bash, но есть и приличное покрытие ksh.

+0

Спасибо, вы очень много помогли! – gmanjake