isdigit()为整数10及以上返回true

时间:2017-09-15 02:37:05

标签: c

新手C学生在这里。

有人可以解释一下为什么isdigit()为10+值返回true? 我正在做一个关于猜谜游戏的非常基本的任务,并且必须使用isdigit()来通知用户他是否输入了数字1-10。 该程序似乎运行正常,否则,我只想知道isdigit()背后的原因为值10 +返回true。

<div className="text-area">
    <div className="backdrop">
        <div className="highlights">
            This is 
            <span className="highlight" data-tip data-for="tooltip-span">highlighted</span>
            <ReactTooltip id="tooltip-span">
                <span>My comment!</span>
            </ReactTooltip>
             text.
        </div>
    </div>
    <textarea>
        This is highlighted text.
    </textarea>
</div>

3 个答案:

答案 0 :(得分:4)

如果您添加printf来记录cResponse的值,问题就会很快显现出来:

printf("\nGuess a number between 1 and 10: ");
scanf("%c", &cResponse);

printf("cResponse is %c\n", cResponse);

输出:

Guess a number between 1 and 10: 10
cResponse is 1

正如你所看到的,只有第一个字符存储在cResponse中(这是有意义的,因为它只是一个字符),并且由于第一个字符是一个数字,你的{{1 } call返回true。

如果您想阅读大于10的数字,可以改为阅读isdigit()

int

请注意,在这种情况下您无法使用int cResponse = 0; printf("\nGuess a number between 1 and 10: "); scanf("%d", &cResponse); printf("cResponse is %d\n", cResponse); // prints '10' if I type '10' ,但您仍然可以使用isdigit()轻松检查边界。

答案 1 :(得分:0)

您正在将char传递给isdigit10只能容纳一个字符。因此,当您输入cResponse时,只有第一个字符(这是一个数字)才会进入{{1}}。

答案 2 :(得分:0)

不是将用户输入作为char读取,而是以int形式读取。这样您就可以使用if(guess >= 1 && guess <= 10)。因为你需要10作为输入范围的一部分,所以char(这是一个单个字符)不会这样做。您将需要使用字符串(这会使事情变得更复杂)或者只使用int。