2012-09-24 31 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