回 帖 发 新 帖 刷新版面

主题:[讨论]为什么没有结果,太奇怪了

character::op,p 
real::x,y
do
read *,x,op,y
select case(op)
case('+')
print *,x+y
case('-')
print *,x-y
case('*')
print *,x*y
case('/')
if(y==0) then
print *,"chu shu wei 0!"
else
print *,x/y
endif
case default
print *,"shu ru cuo wu"
end select
print *,"if you want to contineu,press y"
print *,"if you not,press n"
read*,p
if(p=='n') then
exit
else
cycle
endif
enddo
end
这个程序是一个计算器程序,输入如:3+5
2-6 6*2 9/6然后问你是否继续,如果继续就按y,结束就按n
这个程序编译没有错误,关键是没有结果,一执行就没得反应啊
哪个高手帮帮我啊,


回复列表 (共29个回复)

沙发

因为 read *,x,op,y 这句 
以回车接受指令
3+5的话
输入3 回车
+ 回车
5 回车

板凳


专家说的对啊,就是你说的神了有结果了!但是我想这样呢2+3回车。然后显示5。可以像c一样这样吗

3 楼


就是你说的那样,神了有结果了!能不能这样吗,3+3回车,

4 楼

那考虑把3+5直接传递给某个字符串
然后来读这个字符串,依次解析

5 楼


具体如何搞,你就改改我的程序吗,我已经折腾了好几个小时了,你就好人做到底吗

6 楼

送佛上西天!
格式化输入。


program main
  implicit none

  character(len = 1):: op, p 
  real:: x, y
  do while ( .true. )
    write(*, *) "input x, op, y, separate by blank or Enter: "
    read(*, *) x, op, y
    select case (op)
    case ('+')
      write(*, *) x + y
    case ('-')
      write(*, *) x - y
    case ('*')
      write(*, *) x * y
    case('/')
      if ( y == 0.0 ) then
        write(*, *) "The divisor can't be -- 0!"
      else
        write(*, *) x / y
      endif
    case default
      write(*, *) "The input is error."
    end select
    
    write(*, *) "if you want to contineu, press y, otherwise, press n"
    read(*, *) p
    if( p == 'n' ) then
      exit
    endif
  end do
  
  stop
end program

7 楼

你对C熟悉的话这个不是问题, 完全可以按照你用C的思路. 只是处理方法问题跟语言关系不大.

8 楼


我就是按照c的思路做的,我学过c

9 楼


read (*,10)x,op,y
10 format(f5.2,a,f5.2)
这也不对啊,3+6回车,不行啊,程序没有错误,没结果啊

10 楼

3 是 F5.2 的格式吗?

我来回复

您尚未登录,请登录后再回复。点此登录或注册