2014-01-27 48 views
-2

我已經寫了一些簡單的代碼作爲SSCCE,我想檢查是否輸入的字符串等於我在一個字符指針數組定義的字符串,所以它應該指向字符串並給我一個結果。我沒有得到任何警告或錯誤,但我只是沒有得到任何結果(無論是「真」或「假」)檢查在C柱的平等和打印答案

是有什麼與別人的scanf被掃描?終止符號什麼的?我只是不能夠得到它打印出true或false

代碼:

#include <iostream> 
#include <stdio.h> 
#include <stdlib.h> 


#define LENGTH 20 

//typedef char boolean; 

int main(void) 
{ 
    const char *temp[1]; 
    temp[0] = "true\0"; 
    temp[1] = "false\0"; 

    char var[LENGTH]; 

    printf("Enter either true or false.\n"); 
    scanf("%s", var); 


    if(var == temp[0]) //compare contents of array 
    { 
     printf("\ntrue\n"); 
    } 
    else if(var == temp[1]) //compare contents of array 
    { 
     printf("\nfalse\n"); 
    } 
} 
+3

你不'比較C字符串==','不過strcmp',對於初學者... – AntonH

+0

啊,我想盡可能多的,而不是有沒有辦法用=比較還有呢?我可能在這裏誤導了另一個答案 – shellcoder

+0

不,沒有。還有其他的錯誤,但我沒有解決這些問題,因爲你的問題是關於字符串的比較。 – AntonH

回答

2
const char *temp[1]; 

這定義tmp可以存儲1個char*元素的數組。

temp[0] = "true\0"; 

指定第一個元素。這沒關係。

temp[1] = "false\0"; 

將分配給第二個元素,但temp只能存儲一個。 C不會爲你檢查數組邊界。 也並不是說你不需要在字符串中明確指定的終止「\ 0」,所以只是"true""false"就足夠了。

if(var == temp[0]) 

這隻比較指針值(「存儲字符串的位置」)而不是內容。你需要strcmp()函數(並仔細閱讀,返回的值相同的字符串可能不是你所期望的)。

0

==檢查平等。讓我們看看你在比較什麼。

  • 可變var被聲明爲一個字符數組,所以表達var是真的相當於&var[0](該var陣列中的第一個字符的地址)。
  • 同樣,temp[0]相當於&temp[0][0]temp[0]數組中的第一個字符的地址)。

這些地址有明顯的不同(否則寫var會自動寫入temp[0]也一樣),所以==會一直爲你的情況返回0。

strcmp另一方面,不檢查其輸入是否相等,而是檢查其輸入所指向的數組是否按字符相等(即比較它們的成員而不是它們的地址)和所以你可以使用在C.字符串值得注意的是strcmp返回0(假)如果字符串相等。

+0

感謝這個信息,我已經得到它與strcmp – shellcoder

1

使用strcmp比較字符串:

#include <stdio.h> 

int main(void) 
{ 
    const int LENGTH = 20; 
    char str[LENGTH]; 

    printf("Type \"true\" or \"false\:\n"); 

    if (scanf("%19s", str) != 1) { 
     printf("scanf failed."); 
     return -1; 
    } 

    if(strcmp(str, "true") == 0) { 
     printf("\"true\" has been typed.\n"); 
    } 
    else if(strcmp(str, "false") == 0) { 
     printf("\"false\" has been typed.\n"); 
    } 

    return 0; 
} 

還要注意的是:

  • 字符串文字自動包含空值終止字符("true",不"true\0"
  • const int LENGTH#define LENGTH更好由於型號安全附帶它
  • "%19s"確保不超過19個字符(+ \0)將被存儲在str
  • typedef char boolean;是不是一個好主意
  • 可能性不大,但仍:scanf沒有成功
  • 並且在沒有#include <iostream> :)
+0

工作這看起來更好,整潔,比我做到了,thyks – shellcoder

+0

@ user2387699:不客氣:) – LihO