0

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

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

#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 语句。

谢谢你的帮助!

4

3 回答 3

4

请注意代码中的两件事:

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

修改后的代码:

#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;
}
于 2013-08-11T05:22:38.497 回答
1

将条件更改if为以下内容:

if(strcmp(fruit,"apple") == 0)

strcmp如果匹配则返回 0 个字符串。您应该始终使用==运算符比较结果

于 2013-08-11T04:31:21.967 回答
0

strcmp如果输入匹配,则返回 0,如果左侧“大于”右侧,则某个值>0,如果左侧“小于”右侧,则某个值<0。因此,通常您只想简单地测试与strcmp(...)==0. 但也有聪明的版本:!strcmp(...). 即使你不使用这种风格,学习识别它也是有用的。

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

于 2013-08-11T04:25:59.433 回答