当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《读取字符串并与特定值进行比较》经验,为你挑选了1个好方法。

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

#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...".这里有什么错误?



1> Haris..:

你的代码中有很多问题

1)你没有分配内存answer.做

answer = malloc(100);

不要忘了free(answer)以后再说.

要么

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

char answer[100];


2)你需要char *printf()没有char **.做

scanf("%s", answer);


3)strcmp用于比较字符串,而不是==.

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

!是因为,当s匹配时strcmp返回.0string


4)您还应检查返回值,如下所示scanf().

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


5)您还应该提及char要读取的s 数scanf()以避免缓冲区溢出.

scanf("%99s", answer)

对于一个char array[100]大小100,应该给出99空字符的位置\0.


@stark:很好的建议,但是`scanf`充满惊喜:你应该为`char array [100]`编写`scanf("%99s",answer)`.避免将OP与`malloc`替代混淆.
推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有