我正在用QBasic制作一个简单的计算器,为了实现菜单,我遵循的做法是:
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,这意味着我无法获得完美的坐标。
发布于 2013-12-29 18:17:32
这是给你的。这是相当基本的(没有双关意),但值得一看。我会说,它是未经测试的,所以它可能不会像预期的那样起作用。它应该给你一个如何做事情的想法。
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仍然应该是可靠的。该页上有指向索引的链接,也可以使用左侧导航区域的搜索框查找所需的内容。
发布于 2017-12-16 17:12:21
我知道已经有一个被接受的答案,但仍在用我自己的一种方式尝试。这是一个使用基本Q基本语句的答案。如前所述,我们将使用locate命令格式化输出,并将菜单与屏幕中心对齐。
在开始之前,您必须知道,与其他编程语言不同,Q只有25行和80列(都是从0开始编号的)。查找命令的语法:
这是在屏幕中间打印字符串的方式:首先计算字符串的长度,一半字符串必须打印在右侧,其余的必须打印在中间列的左手侧(中间列为40)。因此,列号为:40 -(字符串长度/ 2)。如果列号相差一两个,这不是问题。
1型:
如果您希望菜单居中,并且单词按以下顺序排列(所有第一个字母对齐)
(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的命令是..。
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的相同程序
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:如果您希望菜单为所有选项的中心,则如下所示:-
(A)dd Numbers
(S)ubtract Numbers
(M)ultiply Numbers
(D)ivide Numbers那么代码是.(但我还是更喜欢使用前一个,它看起来好多了)使用If..elseif...end
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同样的程序使用案例..。
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并确保您填写的位置将是必需的语句,而不是像‘语句所需的加法。希望这能帮上忙。
https://stackoverflow.com/questions/20822655
复制相似问题