Игра угадывания чисел в UNIX - проблема логики - PullRequest
1 голос
/ 27 марта 2012

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

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

Вот код (к вашему сведению, это в оболочке 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 Ответ

1 голос
/ 27 марта 2012

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

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

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

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

Взгляните на эти примеры синтаксиса сценариев оболочки ; в нем много вещей, связанных с bash, но есть и неплохое освещение ksh.

...