【问题标题】:strcmp not working? [closed]strcmp 不工作? [关闭]
【发布时间】:2012-12-11 18:28:05
【问题描述】:

我有一个 strcmp 函数:

if (strcmp(userInput, "Yes") == 0)

由于某种原因,它不会进入 if 语句,即使我确信用户输入肯定等于 Yes。有谁知道有什么问题吗?

【问题讨论】:

  • userInput如何输入?
  • 您的用户输入可能来自fgets,这会留下换行符。
  • 你是怎么得到usrInput的,那是什么类型的?需要更多信息
  • 您应该在此行之前发布一些代码。
  • fprintf(stderr, "\"%s\", userInput); 可以帮助您查看它真正包含的内容(或者,以十六进制打印出字符串的各个字节)。

标签: c string strcmp


【解决方案1】:
  1. 确保包含正确的标题,即<string.h>
  2. 如果您收到 userInput 来自例如fgets(),确保最后没有行终止,它会干扰这样写的比较。

【讨论】:

    【解决方案2】:

    为避免出现拖尾换行的麻烦,您可以只检查前 3 个字符:

    if(strncmp(userInput, "Yes", 3) == 0)
    

    【讨论】:

    • 如果输入的是“YesASDASD”怎么办?
    • 那也可以匹配,但根据用例可能就足够了。
    • 它在 strcmp 不起作用的地方对我有用。我想这是由于一个字符串长度没有很好地定义。
    【解决方案3】:

    按原样,您的代码很好。那不是问题。

    我怀疑你正在这样做:

    fgets(userInput, sizeof(userInput), stdin);
    if(strcmp(userInput, "Yes") == 0)
    

    给你一个换行符:

    ['Y']['e']['s']['\n']
    

    您可以通过多种方式解决此问题:

    if(strcmp(userInput, "Yes\n") == 0)
    

    可能是最简单的。或者你可以通过 scaf 获得输入:

    scanf("%s", userInput);
    

    【讨论】:

      【解决方案4】:

      如果需要帮助,可以进行类型转换。

      //I am assuming usrInput is a char Array
      
      string str(usrInput);
      //string class has a constructor that takes a NULL-terminated C-string
      if (str == "Yes")
      {
         //do what ever you wanted to in the loop
      }
      

      【讨论】:

      • 这在 C 中不会成功
      猜你喜欢
      • 1970-01-01
      • 2010-11-01
      • 2016-06-23
      • 2019-01-26
      • 1970-01-01
      • 1970-01-01
      • 2010-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多