首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用QBasic制作菜单

用QBasic制作菜单
EN

Stack Overflow用户
提问于 2013-12-29 06:10:05
回答 2查看 4.4K关注 0票数 1

我正在用QBasic制作一个简单的计算器,为了实现菜单,我遵循的做法是:

代码语言:javascript
复制
PRINT "Select an Option"
PRINT "1. Addition"
PRINT "2. Subtraction"
PRINT "3. Multiplycation"
PRINT "4. Division"
PRINT "Option No.: "
INPUT opt
CLS
SELECT CASE opt
        CASE 1
                PRINT "You have selected Addition"
                PRINT "Enter a no.:"
                INPUT n1
                PRINT "Enter second no.:"
                INPUT n2
                PRINT "The Sum is "; n1 + n2
        CASE 2
                PRINT "You have selected Subtraction"
                PRINT "Enter a no.:"
                INPUT n1
                PRINT "Enter second no.:"
                INPUT n2
                PRINT "Difference between "; n1; " and "; n2; " is "; n1 - n2
        CASE 3
                PRINT "You have selected Multiplycation"
                PRINT "Enter a no."
                INPUT n1
                PRINT "Enter second no.:"
                INPUT n2
                PRINT "Product is "; n1 * n2
        CASE 4
                PRINT "You have Selected Division"
                PRINT "Enter a no.:"
                INPUT n1
                PRINT "Enter second no.:"
                INPUT n2
                PRINT "The Quotient is "; n1 / n2; " and the remainder is "; n1 MOD n2
        CASE ELSE
                PRINT "Invalid Option Number"
END SELECT

但这一次我想要一个更复杂的,就像:

(A)dd号码

(S)曲线数

(M)超数

(D)ivide数

所有这些都在一个以屏幕为中心的盒子中。我正在使用LOCATE,但我没有得到我想要的结果,是的,我正在尝试没有图形。我还使用INKEY$获取用户输入的密钥。我尝试了INPUT,但它响应了用户输入的字符。

编辑:@user2864740,这意味着我无法获得完美的坐标。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-29 18:17:32

这是给你的。这是相当基本的(没有双关意),但值得一看。我会说,它是未经测试的,所以它可能不会像预期的那样起作用。它应该给你一个如何做事情的想法。

代码语言:javascript
复制
k$ = ""
CLS

' Print the menu and get the operation to perform.
WHILE k$ = ""

    LOCATE 8, 30
    PRINT "Select an option:"
    PRINT
    LOCATE , 30
    PRINT "(A)ddition"
    LOCATE , 30
    PRINT "(S)ubtraction"
    LOCATE , 30
    PRINT "(M)ultiplication"
    LOCATE , 30
    PRINT "(D)ivision"
    PRINT
    LOCATE , 30
    PRINT "Choice: ";

    ' Wait for a key press.
    WHILE k$ = ""
        k$ = INKEY$
    WEND

    SELECT CASE k$
    CASE "A", "S", "M", "D", "a", "s", "m", "d"
        ' Valid option entered.
    CASE ELSE
        k$ = ""
        LOCATE 17, 30
        PRINT "Invalid choice. Try again."
    END SELECT

WEND 'WHILE k$ = ""

' Making the choice uppercase means testing only "A"
'     works instead of testing for "A" and "a".
' The same is true with the other choices.
k$ = UCASE$(k$)

PRINT "You selected: ";
SELECT CASE k$
CASE "A": PRINT "Addition"
CASE "S": PRINT "Subtraction"
CASE "M": PRINT "Multiplication"
CASE "D": PRINT "Division"
END SELECT

此外,在使用INKEY$时要小心。例如,按箭头键。箭头键是扩展键的一个例子,还有其他键。这就是为什么循环是按照它的方式设计的。LEN(INKEY$) > 1当按下扩展键时,与字母或数字不同,其中的LEN(INKEY$) = 1

如果您需要参考资料,http://www.qb64.net/wiki/的wiki仍然应该是可靠的。该页上有指向索引的链接,也可以使用左侧导航区域的搜索框查找所需的内容。

票数 1
EN

Stack Overflow用户

发布于 2017-12-16 17:12:21

我知道已经有一个被接受的答案,但仍在用我自己的一种方式尝试。这是一个使用基本Q基本语句的答案。如前所述,我们将使用locate命令格式化输出,并将菜单与屏幕中心对齐。

在开始之前,您必须知道,与其他编程语言不同,Q只有25行和80列(都是从0开始编号的)。查找命令的语法:

这是在屏幕中间打印字符串的方式:首先计算字符串的长度,一半字符串必须打印在右侧,其余的必须打印在中间列的左手侧(中间列为40)。因此,列号为:40 -(字符串长度/ 2)。如果列号相差一两个,这不是问题。

1型:

如果您希望菜单居中,并且单词按以下顺序排列(所有第一个字母对齐)

代码语言:javascript
复制
           (A)dd Numbers
           (S)ubtract Numbers
           (M)ultiply Numbers
           (D)ivide Numbers

在这里,我们将使用字符串(M)ultiply Numbers(S)ubtract Numbers计算列号,因为它们中的字符数量最多。因此,列数为40 - (18 / 2) = 31。

那么使用If..Elseif..Else的命令是..。

代码语言:javascript
复制
LOCATE 2, 31 : PRINT "(A)dd Numbers"
LOCATE 3, 31 : PRINT "(S)ubtract Numbers"
LOCATE 4, 31 : PRINT "(M)ultiply Numbers"
LOCATE 5, 31 : PRINT "(D)ivide Numbers"
LOCATE 6, 31 : INPUT "ENTER OPTION" ; OPT$
INPUT BLNK 'user must press enter
CLS
'You don't need to worry about whether the string is in upper case or lower
'case as we are going to compare the value only of the string converted
'into upper case using ucase$ function 
IF UCASE$(OPT$) = "A" THEN
'The statements required for addition
ELSEIF UCASE$(OPT$) = "S" THEN
'The statements required for subtraction
ELSEIF UCASE$(OPT$) = "M" THEN
'The statements required for multiplication
ELSEIF UCASE$(OPT$) = "D" THEN
'The statements required for division
ELSE PRINT "INVALID OPTION"
END IF
END

使用case的相同程序

代码语言:javascript
复制
LOCATE 2, 31 : PRINT "(A)dd Numbers"
LOCATE 3, 31 : PRINT "(S)ubtract Numbers"
LOCATE 4, 31 : PRINT "(M)ultiply Numbers"
LOCATE 5, 31 : PRINT "(D)ivide Numbers"
LOCATE 6, 31 : INPUT "ENTER OPTION" ; OPT$
INPUT BLNK 'user must press enter
CLS
OP$ = UCASE$(OPT$)
SELECT OP$
CASE "A"
'The statements required for addition
CASE "B"
'The statements required for subtraction
CASE "M"
'The statements required for multiplication
CASE "D"
'The statements required for division
CASE ELSE
PRINT "INVALID OPTION"
END SELECT
END

类型2:如果您希望菜单为所有选项的中心,则如下所示:-

代码语言:javascript
复制
               (A)dd Numbers
             (S)ubtract Numbers
             (M)ultiply Numbers
              (D)ivide Numbers

那么代码是.(但我还是更喜欢使用前一个,它看起来好多了)使用If..elseif...end

代码语言:javascript
复制
    LOCATE 2, 34 : PRINT "(A)dd Numbers"
    LOCATE 3, 31 : PRINT "(S)ubtract Numbers"
    LOCATE 4, 31 : PRINT "(M)ultiply Numbers"
    LOCATE 5, 32 : PRINT "(D)ivide Numbers"
    LOCATE 6, 33 : INPUT "ENTER OPTION"; OPT$
    INPUT BLNK 'user must press enter
    CLS
    IF UCASE$(OPT$) = "A" THEN
    'The statements required for addition
    ELSEIF UCASE$(OPT$) = "S" THEN
    'The statements required for subtraction
    ELSEIF UCASE$(OPT$) = "M" THEN
    'The statements required for multiplication
    ELSEIF UCASE$(OPT$) = "D" THEN
    'The statements required for division
    ELSE PRINT "INVALID OPTION"
    END IF
    END

同样的程序使用案例..。

代码语言:javascript
复制
    LOCATE 2, 34 : PRINT "(A)dd Numbers"
    LOCATE 3, 31 : PRINT "(S)ubtract Numbers"
    LOCATE 4, 31 : PRINT "(M)ultiply Numbers"
    LOCATE 5, 32 : PRINT "(D)ivide Numbers"
    LOCATE 6, 33 : INPUT "ENTER OPTION"; OPT$
    INPUT BLNK 'user must press enter
    CLS
    OP$ = UCASE$(OPT$)
    SELECT OP$
    CASE "A"
    'The statements required for addition
    CASE "B"
    'The statements required for subtraction
    CASE "M"
    'The statements required for multiplication
    CASE "D"
    'The statements required for division
    CASE ELSE
    PRINT "INVALID OPTION"
    END SELECT
    END

并确保您填写的位置将是必需的语句,而不是像‘语句所需的加法。希望这能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20822655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档