问题是:游戏Totals可以由任何数量的人玩。它以总数100开始,每个玩家依次对总数进行-20和20之间的整数位移。赢家是调整使总数等于5的玩家。仅使用给定的三个变量:总调整计数器这是我迄今为止所做的:
#include <stdio.h>
int main (void)
{
int counter=0;
float adj;
int ttl=100;
printf("You all know the rules now lets begin!!!\n\n\nWe start with 100. What is\n");
while (ttl!=5)
{
printf("YOUR ADJUSTMENT?");
scanf("%f",&adj);
counter++;
if (adj<=20 && adj>=-20)
{
ttl=ttl+adj;
printf("The total is %d\n",ttl);
}
else
{
printf ("I'm sorry. Do you not know the rules?\n");
}
}
printf("The game is won in %d steps!",counter);
}
字符串
我需要的:当输入一个十进制数时,它会转到else。我如何确定一个浮点数是否有小数部分。
5条答案
按热度按时间hivapdat1#
你可以将
float
转换为int
,然后将它与原始变量进行比较。如果它们相同,则没有小数部分。通过使用此方法,不需要临时变量或函数调用。
字符串
说明
由于
int
不能处理分数,因此float
的值将被截断为int
(例如(float)14.3
将被截断为(int)14
)。当比较
14
和14.3
时,很明显它们不是相同的值,因此将打印“fractional!”。5kgi1eie2#
字符串
http://www.cplusplus.com/reference/clibrary/cmath/modf/
modff
找到小数部分,所以我想测试它是否等于0
或null
将回答你的问题。ylamdve63#
如果你想知道一个真实的数
x
是否没有小数部分,试试x==floor(x)
。9avjhtql4#
我只学C所以如果我错了请告诉我。
但如果不用
字符串
如果您用途:
型
因此,如果用户键入整数以外的任何内容,&IsUndef将不等于NULL,并且必须具有小数部分,以将用户发送到其他位置。
也许吧
brc7rcf05#
使用
scanf()
是有问题的。如果用户在输入的第一行输入-5 +10 -15 -15
,然后点击回车,你会依次用scanf()
处理4个数字。这可能不是你想要的。当然,如果用户输入+3 or more
,那么一旦读取空格,第一次转换就会停止,所有后续的转换在o
或or
上都失败了,代码进入了一个循环。你必须检查scanf()
的返回值,以知道它是否能够转换任何东西。预读问题非常严重,我会选择准标准的替代方案,即使用
fgets()
读取一行数据,然后使用sscanf()
(额外的s
非常重要)解析一个数字。要确定浮点数是否有小数部分和整数部分,您可以使用
modf()
ormodff()
函数-后者,因为您的adj
是float
:字符串
返回值是
x
的带符号小数部分;iptr
中的值是整数部分。请注意,modff()
在编译器中可能不可用(运行时库)不支持C99。在这种情况下,您可能必须使用double
和modf()
。但是,限制用户只能输入%d
的整数和adj
的整数类型可能同样简单;我从一开始就这么做了。另一个细节:你真的想把无效的数字计入总尝试次数吗?
型
很明显,我故意忽略了在输入return之前输入超过4095个字符的可能性。