【发布时间】:2019-05-09 13:05:52
【问题描述】:
我正在尝试做一个简单的控制台程序,用户输入一个二进制字符串,他得到一个十进制数。我不需要检查二进制字符串是否有 0 或 1 以外的值。我已经设法将十进制转换为二进制,但不能以其他方式进行。
我尝试了一些在 SO 和 Reddit 上找到的代码,但大多数时候我得到错误 I/O 105
这是要装箱的 dec:
program dectobin;
{$APPTYPE CONSOLE}
uses
SysUtils,
Crt32;
var
d,a :Integer;
str :String;
begin
str:='';
Readln(a);
while a>0 do begin
d:=a mod 2;
str:=concat(IntToStr(d),str);
a:=a div 2;
end;
Writeln(str);
Readln;
end.```
【问题讨论】:
-
I/O 错误与二进制和十进制之间的转换无关。 I/O 错误与 I/O 有关。您关于 I/O 或转换的问题也是如此。要学习的重要一课是将代码分解为执行单个任务的较小部分。编写一个函数将二进制字符串转换为整数值。如果您无法使其工作,请在此处显示并寻求帮助。但就目前而言,这个问题只是要求我们为您编写代码。这不是 SO 的意义所在,它实际上对您毫无帮助。
-
顺便说一下,您没有在二进制和十进制之间进行转换。
Integer中保存的值实际上由机器以二进制形式表示。您正在包含数字的二进制表示的字符串和数字之间进行转换。 -
@DavidHeffernan 更多关于如何做到这一点,是的,如果不清楚,很抱歉,我说的是包含二进制到十进制的字符串(或包含该十进制的字符串)跨度>
-
没有。您没有将二进制转换为十进制,反之亦然。考虑这一点的方法是
Integer变量保存该值,而您的string变量保存该值的表示形式,十进制或二进制或十六进制或其他。在内部,Integer实际上将值表示为二进制,但这是您几乎不需要知道的细节。 -
至于你的问题,我在最初的评论中的建议是有效的。从代码中删除所有 I/O,编写一个函数,尝试将字符串中的二进制表示转换为
Integer值。如果您遇到困难,请返回该代码。您在此处提供的代码执行相反的操作,因此与您所询问的问题完全无关。为了重复我自己,我们不是来为您编写代码的。请访问help center 并拨打tour。这些步骤对于您充分利用 SO 至关重要。