读取字符串并与特定值进行比较

时间:2015-12-07 15:46:10

标签: c

我想从控制台应用程序中读取一个字符串并进行比较:

#include "string.h"
#include "stdio.h"
#include "stdafx.h"

char* answer;

int _tmain(int argc, _TCHAR* argv[])
{
   printf("(yes/no):");
   scanf("%s", &answer);
   if (answer=="yes")
   {
      printf("Yes");
   }
   else
   {
      printf("Exiting...");
   }
   return 0;
}

当我放Exiting...时,我总是收到消息yes。我怎么可能读到yes的正确值但是比较没有检测到 - answer=="yes" - ?

还试过这个:

    #include "string.h"
    #include "stdio.h"
    #include "stdafx.h"

    char answer[100];

    int _tmain(int argc, _TCHAR* argv[])
    {
       printf("(yes/no):");
       scanf("%s", answer);
       if (!strcmp(answer,"yes"))
       {
          printf("Yes");
       }
       else
       {
          printf("Exiting...");
       }
       return 0;
    }

这使我成为"Exiting..."的第二个选项。这里有什么错误?

2 个答案:

答案 0 :(得分:5)

代码中的许多问题

1)您没有为answer分配内存。做

answer = malloc(100);

不要忘记稍后free(answer)

OR

您也可以直接使用数组,因为您不需要动态内存

char answer[100];

<小时/> 2)您需要char *printf()而不是char **。做

scanf("%s", answer);

<小时/> 3)使用strcmp比较字符串,而不是==

if (!strcmp(answer, "yes")
{
    printf("Yes");
}

!因为strcmp0匹配时返回string

<小时/> 4)您还应该检查返回值,例如scanf()

if (scanf("%s", answer) != 1)
{
    printf("scanf failed");
    exit(0);
}

<小时/> 5)您还应该提及char要读取的scanf()个数,以避免缓冲区溢出。

scanf("%99s", answer)

对于char array[100]大小为100的人,应该99为空字符\0保留位置。

答案 1 :(得分:0)

要比较字符串,您应该使用strcmp()

那就是说,answer没有分配内存。在实际使用answer之前,您需要使用数组或使用动态内存分配来获取分配给它的正确内存。

基本上,扫描语句应该看起来像

scanf("%s", answer);

事先将适当的内存分配给answer