1

可能重复:
如何正确比较 C 中的字符串?

尽管我已经讨论这个话题好几个月了,但我对 C 语言还是比较陌生。我正在尝试编写一个简单的问题/响应程序。我知道它与 if else 条件有关(其他一切都有效),但我已经搜索过,似乎找不到问题所在。最后还有重复程序的递归。我放入其中的函数调用可能是错误的。

#include <stdio.h>

main()
{
    char line[100];
    char decision[100];
    printf("Are you gonna throw it?\n");
    printf("Type yes or no.\n");

    scanf("%s", line);
    printf("%s \n", line);

    if (line == "yes") {
        printf("Thanks.\n");
    } else if (line == "no") {
        printf("Why not?\n");
    }

    printf("Do you want to do this again?\n");
    scanf("%s", decision);
    if (decision == "yes") {
        main();
    };
}
4

5 回答 5

2

像这样的比较是line == "yes"行不通的。您需要使用 strcmp 比较您的字符串,例如

if (strcmp(line, "yes") == 0) {
    printf("Thanks.\n");
} else if (strcmp(line, "no") == 0) {
    printf("Why not?\n");
}
于 2012-09-24T17:17:31.767 回答
1

要比较字符串,您必须使用string.h中的strcmp或函数strncmp

另一个问题是:

main应该返回int

int main()

或者

int main(int argc, char *argv[])

或等价的是 C 中 main 的正确签名。

于 2012-09-24T17:18:05.153 回答
0

在这种情况下,递归不是必需的,并且在程序的每次迭代中不必要地在堆栈上建立数据。而是将整个代码包含在一个do {...} while (strcmp(decision, "yes") == 0)循环中。也将line == "yes"and更改line == "no"strcmp(line, "yes") == 0and strcmp(line, "no") == 0

于 2012-09-24T17:22:25.593 回答
0

首先要知道:字符串字面量"yes""no"数组表达式;该表达式 "yes"的类型为“4 元素数组char”(0 终止符额外增加 1 个)。

第二件事要知道:在大多数情况下,“N-element array of T”类型的表达式将被转换为“pointer to T”类型的表达式,其值将是数组第一个元素的地址。

当你写的时候if (line == "yes"),两个表达式line"yes"从“array of char”类型转换为“pointer to char”,它们的值是它们的第一个元素的地址,这将是不同的(即使是的内容,字符串字面line量仍然存在在与 ) 不同的地址。因此,无论 的内容如何,​​比较总是失败。 "yes" "yes"lineline

为了比较两个数组表达式的内容,您需要使用标准库函数strcmp

if (strcmp(line, "yes") == 0) { ... }

strcmp如果两个字符串相等,则返回 0,如果按字典顺序小于,line则返回 < 0,如果按字典顺序大于,则返回> 0 。 "yes"line"yes"

于 2012-09-24T17:26:48.867 回答
0

1)在这里删除分号:

if (decision == "yes")
{
     main();
 }; //<-- if you want to keep this code at all

2)您不能使用 == 比较字符串

strcmp(decision, "yes"); //returns 0 if they are equil

3) 为什么递归调用 main()?为什么不把整个事情放在一个循环中:

main() { 
  char line[100];
  char decision[100] = "yes";
  while(!strcmp(decision, "yes")){
    printf("Are you gonna throw it?\n"); 
    printf("Type yes or no.\n");
    scanf("%s", line);  
    printf("%s \n", line);  
    if (!strcmp(line, "yes"))
      printf("Thanks.\n");   
    else if (!strcmp(line, "no"))     
      printf("Why not?\n");   

    printf("Do you want to do this again?\n");
    scanf("%s", decision); 
  } //end while
} //end main
于 2012-09-24T17:27:12.823 回答