Fortran Coder

查看: 11050|回复: 1
打印 上一主题 下一主题

[求助] 关于翻译密码程序的输入输出问题

[复制链接]

6

帖子

3

主题

0

精华

入门

F 币
35 元
贡献
20 点
跳转到指定楼层
楼主
发表于 2016-9-6 10:20:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序先按照约定的规律将一个字符转换为对应的ASCⅡ码,ASCⅡ码加5后再转换得到原来的字符。当ASCⅡ码加5超过Z,要使之转换为A。对字母之外的字符维持原样。程序如下:
[Fortran] 纯文本查看 复制代码
01! 翻译密码。
02program char_4
03implicit none
04integer::i,j,k
05character*80::line1,line2
06character*1::l1,l2
07read *,line1
08do k=1,80
09    l1=line1(k:k)
10    if ((lge(l1,'A').and.lle(l1,'Z')).or.(lge(l1,'a').and.lle(l1,'z'))) then
11        i=iachar(l1)
12        j=i+5
13    else 
14        if(j>iachar('z').or.(j>iachar('Z').and.j<iachar('Z')+6)) then
15            j=j-26
16            l2=achar(j)
17            line2(k:k)=l2
18        else
19            line2(k:k)=l1
20        end if
21    end if
22end do
23print *,line2
24end program char_4
调试程序没错,但是例如输入 "HE IS IN BEIJING" 程序没反应,求解~

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

2038

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1676 元
贡献
715 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

沙发
发表于 2016-9-6 11:56:06 | 只看该作者
1.如果你用表控格式读取 Line1,则只会读取 HE,后面的 IS IN BEIJING 读取不到。因为表控格式认为空格是间隔符。
2.如果你只读了 HE,则只满足 if ((lge(l1,'A').and.lle(l1,'Z')).or.(lge(l1,'a').and.lle(l1,'z'))) , 后面的 ELSE 一律不执行。所以 Line2 没有值。
也许以下代码是你想要的
[Fortran] 纯文本查看 复制代码
01program char_4
02  implicit none
03  integer::j,k
04  character(len=80)::line1,line2=""
05  character::t
06  read(*,"(a80)") line1 !//此处用格式读入,不用表控,否则只读 HE
07  do k=1,len_trim(line1)
08    t = line1(k:k)
09    if ((lge(t,'A').and.lle(t,'Z')).or.(lge(t,'a').and.lle(t,'z'))) then
10      j = iachar(t) + 5
11      if( j>iachar('z').or.(j>iachar('Z').and.j<iachar('Z')+6) ) then
12        j = j - 26
13      end if
14      t = achar(j)
15    end if
16    line2(k:k) = t
17  end do
18  print *,line2
19end program char_4

您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2025-5-4 19:33

Powered by Discuz! X3.4

© 2013-2025 Comsenz Inc.

快速回复 返回顶部 返回列表