gpt4 book ai didi

c - 一遍又一遍地做同样的事情却得到不同的结果?斯特托克在c。 - 大学生问题

转载 作者:行者123 更新时间:2023-11-30 19:25:41 25 4
gpt4 key购买 nike

因此,我尝试获取输入并使用分隔符对其进行解析。输入格式为 L(#,#,#)L,其中 L 为字母,分隔符为“(),”。我第一次执行此代码时它工作正常,但是当它第二次通过 strtok 返回同一区域时,它会切断最后一个标记,而不是捕获“L”,它只会看到“\n”而不是“L\n”(第一次看到“L\n”),从而使字母“X”而不是“L”。仅当我使用同一字母两次时才会发生这种情况,但如果我使用不同的字母(最后一个字母),它就会起作用。在你问之前,我在大学里,我已经使用数组来存储不同的 token ,并且如果可以的话,我会亲自做不同的事情,但她有非常严格的要求,如果你不遵循,那么你就不会得到任何学分。我已经浏览过 gdb,但据我所知,它与 strtok 有关,我无法在网上找到,并且通过调试器并不明显。即使我在最后打印 *tkn-1 那么“L”仍然存在。如果有人可以帮助我,我将不胜感激!

    fgets(usrInpt, MX_INPT - 1, stdin);
tkn = strtok(usrInpt, dlmtrs);
cmmndLttr = *tkn;
if (cmmndLttr!='q' && cmmndLttr!='Q')
{
tkn = strtok(NULL, dlmtrs);
rwPstn = atoi(tkn);
tkn = strtok(NULL, dlmtrs);
clPstn = atoi(tkn);
tkn = strtok(NULL, dlmtrs);
lnLngth = atoi(tkn);
tkn = strtok(NULL, dlmtrs);
if (tkn != NULL)
lnLttr = *tkn>31?*tkn:'X';
else
lnLttr='X';

PS:我从变量名称中删除了元音,因为她对代码使用了“抄袭检测器”,我想减少我必须处理这个问题的机会(通过它与我自己的代码匹配)。

最佳答案

运行这个:

const char* dlmtrs = "(),";
char str[3][128] = {"L(42,13,12)L\n", "L(0,0,12)L\n", "L(42,0,0)L\n" };


for( int i = 0; i < 3; ++ i )
{
char* token = strtok(str[i], dlmtrs);

while (token != NULL)
{
printf("%s\n", token);
token = strtok(NULL, dlmtrs);
}
}

仍然为每个输入字符串提供正确的输出,请参阅 here

编辑:我更改了要在具有不同值的循环中调用的代码段。

关于c - 一遍又一遍地做同样的事情却得到不同的结果?斯特托克在c。 - 大学生问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58497609/

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