【发布时间】:2017-02-08 17:18:53
【问题描述】:
我对编程非常陌生,正在尝试仅使用数字制作基本的美式轮盘游戏,板上出现的一个数字是“00”,我正在尝试将“00”分配给结构中的变量数组,我不知道如何做这个特定的数字,因为它读为“0”。这是我用来设置它的代码,对于这个可能非常愚蠢的问题,我很抱歉,但我已经搜索了几个小时,只有非常复杂的答案出现了,我还无法理解(尽管我已经尝试过)。由于我根据要求使用的非常基本的编译器,因此需要将输入读入一个,这样输入将是“number number number number number number number”。
#include <stdio.h>
#include <string.h>
int main( void )
{
struct bet /* Setting up a structure array to store input values */
{
float number;
float betValue;
} playerBet[4];
scanf("%f %f %f %f %f %f %f %f", &playerBet[0].number, &playerBet[0].betValue, &playerBet[1].number, &playerBet[1].betValue,&playerBet[2].number, &playerBet[2].betValue,&playerBet[3].number, &playerBet[3].betValue);
}
任何帮助将不胜感激!
【问题讨论】:
-
如果您将输入作为字符串,您可以检查
"00",然后调用它,例如37。否则sscanf提取数字的字符串。但我建议不要将float用于整数值。我还建议不要使用float来赚钱:最好以美分工作。如果你必须使用浮桥,千万不要使用float,你可以使用double。 -
我不知道。所以它必须被读取为一个字符串。
-
@WeatherVane 非常感谢,我现在可以读取“00”。我还没有被介绍给 sscanf,那我可以用它来比较数字吗?我将使用 switch 语句来检查我是否有获胜值,因此对于 case 语句从 playerBet[0].number 中提取数字,我将使用 sscanf?
-
在获得
fgets的输入后,您使用sscanf的方式与scanf类似。请参阅手册页。一大优点是,与scanf不同,当输入要求不满足时,该功能不会“阻塞”。始终检查这些函数的返回值,它会告诉您转换了多少项。我建议您将"00"视为37,因为您在0...37范围内有38 个数字,您可以制作0和37的特例(实际上是"00")。此外,可以从值中提取“红/黑”和“奇/偶”等,减少case语句的数量。 -
@WeatherVane 我现在已经实现了 fgets 和 sscanf,非常感谢您指出正确的方向,这比使用 scanf 更有意义。我对您将 00 视为 37 的意思感到有些困惑,我该怎么做?抱歉问题太多了,我边走边学。