有没有办法将一系列零作为int输入?

时间:2015-01-18 02:41:19

标签: c++ string int cin

我正在重建70年代的老策划视频游戏。

用户进行四位数猜测,然后将其记录为矢量。

我知道有一种方法可以将输入作为一个字符串接受,但是我觉得如果没有单一的int输入方法可以做到这一点很奇怪 - 我还没有能够找到一种方法。

我当前设置的方式,如果用户提供0003的输入,这将被记录为数字不足的错误,因为int的值被解释为3.不完全出乎意料,但是有真的没办法使用int方法一次取全部四位数?

谢谢!

0

/ E 考虑到游戏机制,输入3(数字错误不足)应与0003的输入区分开来;

4 个答案:

答案 0 :(得分:13)

“三”。 “3”。 “Threeeeeeeeeeeeeeeeee”。 “03”。 “003”。 “0003”。 “00000000000000003”。 “III”。 “3”。 “11”。 “3”。 “三”。 “Γ'”。

上述所有事情有什么共同之处?他们都是三号†的代表。表示不同吗?是。他们代表的数字是不同的吗?不,只有一个三号。

三号与三号无法区分,因为只有一号三号。但是,三个数字的两个表示可能彼此不同,因为它们可能使用不同的符号或不同的规则来将符号组合在一起。

C ++中的{p> int(以及几乎所有具有类似数据类型的语言)都用于处理数字。因此,如果将数字3分配给这种类型的变量,则得到数字3。你没有得到它的任何特定表示。这是第三名。当你要求输出时,你可以得到它的表示。

那么,如果它们代表相同的数字,你如何区分“3”和“0003”之间的区别?简单:你不使用数字。

这里的根本问题是你认为你正在处理数字,但事实并非如此。您关心的是陈述,而不是数字本身。因此,您应该使用可以处理表示的数据类型,而不是可以处理数字的数据类型。我认为最简单的解决方案是使用std::string


†按顺序:英语,带有印度 - 阿拉伯数字的十进制数,带有无关“e”的英语表示语音中较长的最终声音,基数为8的C表示法,基数为8的C#表示法,附加多余的零,基础八十七,印度 - 阿拉伯数字和三个冗余零,基数三十,印度 - 阿拉伯数字和十二个冗余零,罗马数字,东方阿拉伯数字,基数二,印度阿拉伯数字,天城数字,中文数字和希腊数字

答案 1 :(得分:1)

  

用户进行四位数猜测,然后将其记录为矢量。

为什么不将输入实际存储为矢量呢?将四个值读入一个数组,然后使用该数组确定结果。据我所知,没有简单的方法来获取存储前导零的内容。

答案 2 :(得分:1)

您当然可以使用简单的int来获取所有四位数。如果用户输入0003,程序将其存储为3,但您仍然可以轻松识别千位,数百位和十位位置都等于零。如果您使用单个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);
}

答案 3 :(得分:-7)

与许多计算器一样,数字左侧的0将被删除。因此无法输入0003并被识别为int(您还可以阅读文档以了解数据类型:http://www.cplusplus.com/doc/tutorial/variables/

我发现很多可能来解决你的问题:

  • 使用FLOAT或DOUBLE数据类型,因此您可以输入0003并将其解释为小数(0.0003;现在,只取小数部分)

  • 输入数字1 x

  • 输入一个char数组,然后将其解析为整数,计算位数及其中有多少是0。