2012-09-24 32 views
1

可能重复:
How do I properly compare strings in C?条件语句和数组在C(初学者)

虽然我一直坐在这个话题了几个月,我是比较新的C.我试图写一个简单的问题/回应计划。我知道它与其他条件(其他所有条件)都有关系,但是我已经搜索并且似乎无法找到问题。最后还有递归重复该程序的递归。我放入它的函数调用可能是错误的。

#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(); 
    }; 
} 
+0

对不起。比较字符串的想法并没有到我这里来。 – kizlink

回答

2

比较如line == "yes"不起作用。 您需要使用strcmp比较您的字符串,例如

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

如果你想忽略case'strcasecmp()' – James

1

比较字符串,你必须使用strcmpstrncmp功能从文件string.h

另一个问题是:

main应该返回int

int main()

OR

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

或者等效为主要在C.适当签名

0

递归是不是在这种情况下,必要的和不必要地为在栈上堆积数据程序的每次迭代。请将您的整个代码封装在do {...} while (strcmp(decision, "yes") == 0)循环中。还将line == "yes"line == "no"更改为strcmp(line, "yes") == 0strcmp(line, "no") == 0

0

首先要知道的是:字符串文字像"yes""no"数组表达式; 表达式"yes"具有类型“char”的4个元素阵列(对于0终止符,额外1个)。

要知道的第二件事:在大多数情况下,类型为“T的N元素数组”的表达式将被转换为类型为“指向T的指针”的表达式,其值将是第一个元素的地址的阵列。

当写if (line == "yes"),两个表达式line"yes"是从型转换“阵列的char”到“指针char”,和它们的值是其第一元件,的这将是不同(地址即使line的内容是"yes",字符串文字"yes"的生活地址与line不同)。因此,无论line的内容如何,​​比较总是失败。

为了比较内容两个阵列表达式,则需要使用标准库函数strcmp

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

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

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你不能compaire字符串)为什么recursivly调用的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