使用scanf()读取“00”

时间:2017-02-08 17:18:54

标签: c scanf

我对编程非常陌生并试图仅使用数字制作一个基本的美式轮盘游戏,一个数字显示在板上是“00”,我试图将“00”分配给结构中的变量数组,我不知道怎么做这个特定的数字,因为它读取为“0”。这是我用来设置的代码,抱歉可能是非常愚蠢的问题,但我一直在搜索几个小时,只有极其复杂的答案已经出现,我无法理解(尽管我已经尝试过了) )。由于我正在使用的非常基本的编译器输入需要读取,输入将是“数字编号编号编号编号”。

#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);
}

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

对于浮点数和整数,000无法区分。正如@Weather Vane在评论中指出的那样,您可以使用sentinel value来区分双零。您还可以将每个数据点作为字符串输入(因为"0" and "00"在被解释为字符数组时被区分为不同。)

对于这些简单(可能是家庭作业问题)的小型项目,您可以使用atoi()将字符串转换为数字值来解析输入。

您可能应该使用整数在内部建模数据。这将确保您在检查输入的均匀度或奇怪度时不会遇到问题。您的数据结构似乎不需要建模浮点数据。

实施例

将结构元素number设为整数,betValuefloat

int number;
float betValue;

输入数字作为字符串并解析它:

char input_number[3]; // 2 spaces plus null terminator
int number;           // numeric version (after parsing)
float bet_value;      // float value for bet
scanf("%s %f", input_number, &bet_value);
if (input_number[0] == '0' && input_number[1] == '0') {
    number = 37;
} else {
    number = atoi(input_number);
}
// Assign them to structure
playerBet[0].number = number;
playerBet[0].betValue = bet_value;