【问题标题】:Trouble with strchr in CC中strchr的问题
【发布时间】:2015-09-22 01:35:24
【问题描述】:

我无法弄清楚为什么Strchr() 在我的功能中不起作用。我需要查看用户猜测是否匹配隐藏单词中的任何字母。这是一个刽子手游戏。

int guessLetter(char* word, int* guessedLetters)
{
    char guess[20];
    char *s;

    printf("Enter your guess: ");
    scanf("%s", &guess);

    s = strchr (word, guess);
    printf("%s", s);

    if (s != NULL) {
        printf ("Good Guess\n");
    } else {
        printf ("Bad Guess\n");
    }

}

不管猜对还是错,我的else语句都被激活了。我的printf 显示s 被赋予Null 的值,无论该字符是否在单词中。

所以我想我的问题在于这部分代码:

s = strchr (word, guess);

我是 C 新手,所以我确信我只是缺少一些非常基本的东西。我已尝试尽可能多地搜索网络,但我似乎无法理解我做错了什么。

【问题讨论】:

  • const char * strchr ( const char * str, int character ) 在第二个参数中接受一个 int 输入。不是字符 [20]。您的函数也返回一个未定义的 int 值 atm..
  • strchr的参数是一个字符数组和一个字符(不是字符数组)。
  • 另外,从您的scanf 中删除&。扫描/打印%s时不要添加&
  • 你可能需要strstr
  • @amdixon。谢谢,我花了一点时间才明白为什么它需要一个 int 参数,但我现在明白了。

标签: c strchr


【解决方案1】:

strchrint 作为第二个参数,但您传递的是char*。你打开你的编译器警告。

您想要的是遍历word 以查看guess 中是否有任何字符。

s = 0;
for(size_t i=0; word[i]; i++) {
    s = strchr (guess, word[i]);
    if(s) break; //Found a match
}

这将在第一次匹配时中断,如果您想检查 word 中的 所有 个字符,可以对其进行修改。

scanf 调用中也存在参数不匹配:

scanf("%s", &guess);

应该是

scanf("%s", guess);

scanf 需要 char* 格式字符串 %s 但您传递的是 char(*)[20]&guesschar (*)[20] 类型。

【讨论】:

  • 我想我理解得更好一些,但我没有看到你给我的循环中将任何内容与“猜测”进行比较哦,nvm,我看到你更改了循环以添加“猜测”。跨度>
  • @Xarigizel 错误。现在编辑帖子。另外,请注意word 必须是一个以空字符结尾的字符串。如果不是,那么您需要将其中的字符数作为另一个参数传递并循环该数字。
  • 感谢您的帮助,出于某种原因,我发现与 C++/Java 相比,理解 C 语言要困难得多。感谢所有的指点,现在将进行更改,看看它是否适合我
  • 这看起来很像strcspn()
猜你喜欢
  • 1970-01-01
  • 2016-05-14
  • 2011-05-04
  • 2014-04-24
  • 2017-01-29
  • 1970-01-01
  • 1970-01-01
  • 2020-05-11
  • 1970-01-01
相关资源
最近更新 更多