我正在做的程序的正常输入是5:3B2F。 ,全部插入同一行,输出将在基数5中写入3B2F。
我们已被指示将该行读为两个字符(一个用于基数,另一个用于数字)
我遇到的问题是我不知道如何通过每个角色并同时进行必要的操作,忽略“:”和“。”,然后我还必须确保从“:”到“。”的“数字”。最多包含7个字符。
同样当我将enrty作为char读取时,如果基数为数字,我会收到错误,说明预期的char但是找到了smallint
我是一名初学者,我们不允许使用数组
num:=0;
read(base,digits);
while (base <> '$') and (digits < MAXLENGHT) do
如何检查数字是否为特定长度)
begin
num:=(num*base)+digit;
(这个过程应该重复每个数字IN“数字”(exept for:and。),我不知道该怎么做)
writeln(num);
read(base,digits)
end;
答案 0 :(得分:0)
使用您的示例5:3B2F
3B2F
部分的基础是什么?我猜16但是肯定必须定义,不是吗?
将整个输入作为字符串读取(比如inStr: string;
。
然后将字符串分成两部分(在冒号处)并使用val()
函数将字符串转换为值,首先是radix: integer
,然后是inValue: integer
。如果第二部分是十六进制的,你需要在字符串前添加'$',否则`val()'会在字符串上窒息或者给出错误的结果。
高尚的学习过程更有趣的方法是使用一个或两个repeat
- until
循环和case语句从输入中提取值:
// to extract the requested radix
done := False;
i := 1;
repeat
c := inStr[i];
case c of
'0'..'9': radix := radix * 10 + (ord(c) - Ord('0'));
':' : done := True;
else //Show error invalid input and terminate
end;
inc(i);
// show error if i > n, whatever n is
until done ;
// a similar loop and case for cases of characters '0'..'9', 'A'..'F' and 'a'..'f'.
为了不破坏你的作业,我留下这个让你锻炼。