gpt4 book ai didi

c - strcspn() 在一段时间内停止

转载 作者:太空宇宙 更新时间:2023-11-04 03:06:48 25 4
gpt4 key购买 nike

我正在编写一个函数来解析包含掷骰子描述的字符串,例如“2*1d8+2”。当它们是整数时,我提取四个值 OK,但我希望能够将 float 也用于乘数和最后的加法。当我尝试解析这样一个字符串时,事情变得很糟糕:“1.8*1d8+2.5”。

我确定问题出在函数 strcspn 上.我要求它解析输入字符串 s (包含骰子字符串)并在星号或“x”处停止:

const char * s = "1.8*1d8+2.5";
size_t l = strcspn(s,"*x");

函数应该返回 3 ,因为星号位于第 4 个位置。但是,它似乎停在小数点分隔符(句点)上并返回 1 .

这并不是说没有这个我就不能继续编写我的函数,因为还有其他方法可以完成任务,但我仍然很好奇为什么会发生这样的事情。以前有人遇到过这个问题吗?

[编辑]

没关系,我找到了答案,这是我的愚蠢,而不是编译器在捉弄我。我使用了这段代码:

if (l = strcspn(s,"*x") < strlen(s)) {
...

返回了 1 (或 true )因为 strcspn(s,"*x") < strlen(s)评估为 true - 并被分配给 l多变的。我应该添加括号:

if ((l = strcspn(s,"*x")) < strlen(s)) {
...

尽管如此,还是感谢您的回答,尤其是@sleske,是他让我更深入地分析了我的代码(从而找到了答案)。

最佳答案

一定是别的地方出错了。我写了一个测试程序:

#include <stdio.h>
#include <string.h>
void main(){
const char * s = "1.8*1d8+2.5";
size_t l = strcspn(s,"*x");
printf("l: %d\n", l);
}

并在 Linux 上用 gcc 编译。在我的系统上,它输出“3”。

请发布一个完整的工作示例来展示问题。然后我们会看到...

关于c - strcspn() 在一段时间内停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4010312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com