新手学Free Pascal求解,“1 + 2”(exitcode:106)

2025-03-11 02:23:07
推荐回答(4个)
回答1:

其实这个很简单,因为char读入时不用输入空格,所以稍微改进一下就是:
var
c,d:char;
a,b,h:real;
begin
read(c);
a:=ord(c)-48;
read(d);
read(c);
b:=ord(c)-48;
case d of
'+':h:=a+b;
'-':h:=a-b;
'*':h:=a*b;
'/':h:=a/b;
end;
write(h:0:2);
end.
不过因为不用string来编写,所以这个程序只能用来算两个一位数相加(减、乘、除),如果用pascal来编这道题的话程序应该这样写:
var
s:string;
i,n:longint;
a,b,h:real;
c:char;
begin
readln(s);
n:=length(s);
for i:=1 to n do
begin
if s[i]in['0'..'9']then a:=a*10+ord(s[i])-48
else break;
end;
c:=s[i];
for i:=i+1 to n do
b:=b*10+ord(s[i])-48;
case c of
'+':h:=a+b;
'-':h:=a-b;
'*':h:=a*b;
'/':h:=a/b;
end;
write(h:0:2);
end.

回答2:

事实上只要在一行里出现除数字外字符,read(longint/real)操作都会报错
对于这类问题一般要用字符串处理。
比如
a:=0;
read(c);
while c>='0' and c<='9' do begin a:=a*10+ord(c)-ord('0'); read(c) ;end;
yusuanfu:=c;
b:=0;
read(c);
while c>='0' and c<='9' do begin b:=b*10+ord(c)-ord('0'); read(c) ;end;
case yusuanfu of
...:
....:
end;
这样就可以了

回答3:

数字以空格为结束

回答4:

好垃圾