[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

【练习-039】批处理输出设定范围内的字母

出题目的:
  掌握将常量字符转划成数字变量的方法
  掌握随机取值的方法
加分规则:
  满分10分,视情形加分(以思路为重)
解题限制:
  此题仅限普通会员作答,技术组和管理层可做解题指导,如贴出代码,则法不容情
题目如下:
  编写批处理代码,当使用者输入1-26(因为字母有26个)间的任意一个数后,程序在
26个字母中再随机生成一个不等于输入位序上字母的字母(a-z的位序为1-26),最后程序
将这两个字母中的所有字母在一行内列出,示例如下:
  1. 请输入1-26中的任意一个数值:18
  2. g和r之间的字母是:hijklmnopq
复制代码
给出参考答案如下:
  1. @echo off
  2. set "code=abcdefghijklmnopqrstuvwxyz"
  3. set /p input=请输入1-26内的任意数值:
  4. :lp
  5. set /a _random=%random%%%26+1,a=_random-input
  6. if "%a:-=%" lss "2" goto lp
  7. if %_random% gtr %input% (
  8.    set /a a=input,b=27-_random,c=a-1,d=_random-1
  9.    ) else (
  10.    set /a a=_random,b=27-input,c=a-1,d=input-1
  11. )
  12. call,set /p=%%code:~%c%,1%%和%%code:~%d%,1%%间的字母是:%%code:~%a%,-%b%%%<nul
  13. pause>nul
复制代码


[ 本帖最后由 batman 于 2009-4-9 00:15 编辑 ]
***共同提高***

楼上的代码还有两个问题:
  一、会出现aa等于bb的情况,这样没有中间的字母可列。
  二、没有显示出由输入数确定的字母以及系统随机选择的字母。
程序运行的结果应该如下:
  1. 请输入1-26中的任意一个数值:3
  2. c和w之间的字母是:defghijklmnopqrstuv
复制代码
***共同提高***

TOP

楼上的代码有问题:
    一、没有按要求列出根据输入值得出的字母及程序随机选择的字母
    二、程序运行的结果是!var:~,%n%!(n为程序随机取得的数值)
    三、最后少了pause导致双击就会一闪而过
    四、代码书写不规范,嵌套时应进行代码缩进
    五、代码复杂了
***共同提高***

TOP

原帖由 523066680 于 2009-3-1 09:33 发表
楼主的代码输入18的时候……



1   该是xx与r之间的
2   即使是z  之间的 rstuvw哪去了?  

谁叫你没鸟我?我就来找漏洞~

呵呵,是改代码时写错一个字符,有一个input写成了_input,感谢兄弟指出,已改正。
***共同提高***

TOP

一、楼上的没有将输入的数值转化为字母并和程序随机选择的字母一起输出
二、同时没有考虑对当两个字母为c d中间无字母的情况的判断和筛选

[ 本帖最后由 batman 于 2009-3-1 23:43 编辑 ]
***共同提高***

TOP

最近老是搞错,可能真的是老糊涂了。。。

[ 本帖最后由 batman 于 2009-3-1 23:44 编辑 ]
***共同提高***

TOP

原帖由 shqf 于 2009-3-1 23:35 发表
可_!n!的变量后面楼主你没有用到呵,因你后面用的是变量截取的方法。
不过,字母常量和数字变量一一对应的思路也不错,试编一个:@echo off&setlocal enabledelayedexpansion
set "codes=a b c d e f g h i j k ...

兄弟你说得对,是我搞糊涂了,我最开始就是写的你一样的代码,后来改的时候居然忘记不要将常量和数字变量对应了(后面原确是用的字符截取
***共同提高***

TOP

返回列表