有没有办法将一系列零作为 int 输入?
Is there a way to take a series of zeros as an int input?
我正在重现 70 年代的经典 mastermind 视频游戏。
用户猜测四位数,然后将其记录为向量。
我知道有一种方法可以将输入作为字符串接受,但是如果没有一种方法可以用一个 int 输入来做到这一点,我会觉得很奇怪——我没能做到找到一个方法。
我目前的设置方式是,如果用户输入 0003,这将被记录为数字不足错误,因为 int 的值被简单地解释为 3。并非完全出乎意料,但真的没有办法使用 int 方法一次获取所有四位数字吗?
谢谢!
O
/e
考虑到游戏机制,输入 3(数字不足错误)应该与输入 0003 区分开来;
the users makes a four digit guess, which is then logged as a vector.
那你为什么不把输入存储为一个向量呢?将四个值读入一个数组,然后使用该数组来确定结果。据我所知,没有简单的方法可以让整数存储前导零。
很多计算器都会把数字左边的0删掉。因此无法输入 0003 并被识别为 int(您还可以阅读文档以了解数据类型:http://www.cplusplus.com/doc/tutorial/variables/)
我看到了很多解决问题的可能性:
使用 FLOAT 或 DOUBLE 数据类型,因此您可以输入 0003 并将其解释为小数(0.0003;现在,只取小数部分)
输入数字 1 乘 1
输入一个char数组,然后解析成整数,统计位数,有多少个0。
您当然可以使用简单的 int 来获取所有四位数字。如果用户输入0003,程序会把它存为3,但是你还是可以很容易的认出千位、百位、十位都为0。如果您使用单个 int 作为输入,则可以使用简单的除法和 mod 分别访问每个数字。例如:
int i=3;
if(i<0 || i>9999) printf("error\n");
else {
int i1=(i/1000);
int i2=(i/100)%10;
int i3=(i/10)%10;
int i4= i%10;
printf("i = %d (%d - %d - %d - %d)\n", i, i1, i2, i3, i4);
}
"Three"。 “3”。 "Threeeeeeeeeeeeeeeeee"。 “03”。 “003”。 “0003”。 “00000000000000003”。 "III"。 “٣”。 “11”。 “३”。 “三”。 "Γ'".
以上所有事情有什么共同点?它们都是数字 3† 的代表。表示方式不同吗?是的。他们代表的数字是不同的吗?不,只有一个三。
三号和三号没有区别,因为三号只有一个。但是,数字三的两种表示可能彼此不同,因为它们可能使用不同的符号,或者将符号组合在一起的不同规则。
C++ 中的 int
(以及几乎所有具有相似数据类型的语言)用于处理 数字 。因此,如果将数字三分配给这种类型的变量,就会得到数字三。你没有得到它的任何特定表示。这是第三个。当你要求它时,你会得到它的表示,就像你输出它时一样。
那么,如果“3”和“0003”代表相同的数字,您如何区分它们呢?简单:你不用数字。
这里的根本问题是你认为你在处理数字,但实际上不是。您关心的是表示,而不是数字本身。因此,您应该使用一种可以处理表示的数据类型,而不是可以处理数字的数据类型。我相信最简单的解决方案是使用 std::string
.
† 依次为:英语、印度-阿拉伯数字的十进制、带有外来 "e"s 的英语以暗示语音中较长的最终声音、C 表示法中的八进制、C# 表示法中的八进制额外的冗余零,以八十七为基数的印度阿拉伯数字和三个冗余零,以三十为基数的印度阿拉伯数字和十二个冗余零,罗马数字,东方阿拉伯数字,以二为基数的印度阿拉伯数字,梵文数字,中文数字, 和希腊数字。
我正在重现 70 年代的经典 mastermind 视频游戏。
用户猜测四位数,然后将其记录为向量。
我知道有一种方法可以将输入作为字符串接受,但是如果没有一种方法可以用一个 int 输入来做到这一点,我会觉得很奇怪——我没能做到找到一个方法。
我目前的设置方式是,如果用户输入 0003,这将被记录为数字不足错误,因为 int 的值被简单地解释为 3。并非完全出乎意料,但真的没有办法使用 int 方法一次获取所有四位数字吗?
谢谢!
O
/e 考虑到游戏机制,输入 3(数字不足错误)应该与输入 0003 区分开来;
the users makes a four digit guess, which is then logged as a vector.
那你为什么不把输入存储为一个向量呢?将四个值读入一个数组,然后使用该数组来确定结果。据我所知,没有简单的方法可以让整数存储前导零。
很多计算器都会把数字左边的0删掉。因此无法输入 0003 并被识别为 int(您还可以阅读文档以了解数据类型:http://www.cplusplus.com/doc/tutorial/variables/)
我看到了很多解决问题的可能性:
使用 FLOAT 或 DOUBLE 数据类型,因此您可以输入 0003 并将其解释为小数(0.0003;现在,只取小数部分)
输入数字 1 乘 1
输入一个char数组,然后解析成整数,统计位数,有多少个0。
您当然可以使用简单的 int 来获取所有四位数字。如果用户输入0003,程序会把它存为3,但是你还是可以很容易的认出千位、百位、十位都为0。如果您使用单个 int 作为输入,则可以使用简单的除法和 mod 分别访问每个数字。例如:
int i=3;
if(i<0 || i>9999) printf("error\n");
else {
int i1=(i/1000);
int i2=(i/100)%10;
int i3=(i/10)%10;
int i4= i%10;
printf("i = %d (%d - %d - %d - %d)\n", i, i1, i2, i3, i4);
}
"Three"。 “3”。 "Threeeeeeeeeeeeeeeeee"。 “03”。 “003”。 “0003”。 “00000000000000003”。 "III"。 “٣”。 “11”。 “३”。 “三”。 "Γ'".
以上所有事情有什么共同点?它们都是数字 3† 的代表。表示方式不同吗?是的。他们代表的数字是不同的吗?不,只有一个三。
三号和三号没有区别,因为三号只有一个。但是,数字三的两种表示可能彼此不同,因为它们可能使用不同的符号,或者将符号组合在一起的不同规则。
C++ 中的int
(以及几乎所有具有相似数据类型的语言)用于处理 数字 。因此,如果将数字三分配给这种类型的变量,就会得到数字三。你没有得到它的任何特定表示。这是第三个。当你要求它时,你会得到它的表示,就像你输出它时一样。
那么,如果“3”和“0003”代表相同的数字,您如何区分它们呢?简单:你不用数字。
这里的根本问题是你认为你在处理数字,但实际上不是。您关心的是表示,而不是数字本身。因此,您应该使用一种可以处理表示的数据类型,而不是可以处理数字的数据类型。我相信最简单的解决方案是使用 std::string
.
† 依次为:英语、印度-阿拉伯数字的十进制、带有外来 "e"s 的英语以暗示语音中较长的最终声音、C 表示法中的八进制、C# 表示法中的八进制额外的冗余零,以八十七为基数的印度阿拉伯数字和三个冗余零,以三十为基数的印度阿拉伯数字和十二个冗余零,罗马数字,东方阿拉伯数字,以二为基数的印度阿拉伯数字,梵文数字,中文数字, 和希腊数字。