2014-01-27 28 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