在C中使用fgets和strcmp

时间:2013-08-11 04:23:54

标签: c fgets strcmp

我正在尝试从用户那里获取字符串输入,然后根据输入的输入运行不同的函数。

例如,我说,“你最喜欢的水果是什么?”我希望程序根据他们输入的内容发表评论...我不知道该怎么做。这是我到目前为止所做的:

#include <stdio.h>
#include <string.h>

char fruit[100];

main() {
    printf("What is your favorite fruit?\n");
    fgets (fruit, 100, stdin);
    if (strcmp(fruit, "apple")) {
        printf("Watch out for worms!\n");
    }
    else {
        printf("You should have an apple instead.\n");
        }

}

当我运行程序时,无论我输入什么,它都不会发出else语句。

感谢您的帮助!

3 个答案:

答案 0 :(得分:3)

请注意代码中的两件事:

  1. fgets保持尾随'\ n'。在与字符串“apple”进行比较之前,水果中的关联字符应替换为'\ 0'。
  2. strcmp当两个字符串相同时返回0,所以if子句应该根据你的意思改变。(果子和“apple”在if子句中是等价的)
  3. C main函数的标准用法是int main(){ return 0;}
  4. 修订后的代码:

    #include <stdio.h>
    #include <string.h>
    
    char fruit[100];
    
    int main() {
        printf("What is your favorite fruit?\n");
        fgets (fruit, 100, stdin);
        fruit[strlen(fruit)-1] = '\0';
        if (strcmp(fruit, "apple") == 0) {
            printf("Watch out for worms!\n");
        }
        else {
            printf("You should have an apple instead.\n");
        }
        return 0;
    }
    

答案 1 :(得分:1)

if条件更改为以下内容:

if(strcmp(fruit,"apple") == 0)
如果匹配,

strcmp返回0个字符串。您应始终使用==运算符

比较结果

答案 2 :(得分:0)

如果输入匹配,则

strcmp返回0,如果左边比右边更大,则返回一些值> 0;如果左边比右边“更小”,则返回一些值<0。所以通常你只想用strcmp(...)==0测试相等性。但是还有聪明的版本:!strcmp(...)。即使你不使用这种风格,学习识别它也很有用。

请记住,fgets不会从字符串中删除换行符'\n'