检查 char 变量的内容 - C 编程

标签 c variables if-statement char

这似乎是一个非常简单的问题,但我正在努力解决这个问题。我已经使用 Objective C 编写 iPhone 应用程序几个月了,但我决定学习 C 编程,以便为自己打下更好的基础。

在 Objective-C 中,如果我有一个名为“label1”的 UILabel,其中包含一些文本,并且我想根据该文本运行一些指令,那么它可能类似于;

if (label1.text == @"Hello, World!")
{
NSLog(@"This statement is true");
}
else {
NSLog(@"Uh Oh, an error has occurred");
}

我写了一个非常简单的 C 程序,它使用 printf() 请求一些输入,然后使用 scanf() 接受来自用户的一些输入, 所以像这样;

int main()
{
    char[3] decision;

    Printf("Hi, welcome to the introduction program.  Are you ready to answer some questions? (Answer yes or no)");
    scanf("%s", &decision);
}

我想做的是应用一个 if 语句来判断用户是否输入了 yes 然后继续提出更多问题,否则打印出一行文字表示感谢。

在使用 scanf() 函数后,我捕获了用户输入并将其分配给变量“decision”,这样它现在应该等于是或否。所以我想我可以做这样的事情;

if (decision == yes)
{
     printf("Ok, let's continue with the questions");
}
else 
{
     printf("Ok, thank you for your time.  Have a nice day.");
}

这会引发“使用未声明的标识符是”的错误。我也试过了;

if (decision == "yes")

这会出现“未指定与字符串文字进行比较的结果”

我已经尝试通过计算输入的字符数来查看它是否有效;

if (decision > 3)

但是得到“指针和整数'Char and int'之间的有序比较”

而且我也试过这个来检查变量的大小,如果它大于 2 个字符,它必须是;

if (sizeof (decision > 2))

我很感激这可能是我忽略的简单或微不足道的事情,但任何帮助都会很棒,谢谢。

最佳答案

Daniel Haviv 的回答告诉了您应该做什么。我想解释一下为什么您尝试过的方法不起作用:

if (decision == yes)

没有标识符 'yes',所以这是不合法的。

if (decision == "yes")

在这里,“yes”是一个字符串文字,其计算结果为指向其第一个字符的指针。这将“决定”与等价指针进行了比较。如果它是合法的,那么如果它们都指向同一个地方,那将是正确的,这不是你想要的。事实上,如果您这样做:

if ("yes" == "yes")

行为未定义。如果实现将相同的字符串文字折叠到相同的内存位置,它们将指向相同的位置,它可能会也可能不会这样做。所以这绝对不是您想要的。

if (sizeof (decision > 2))

我假设你的意思是:

if( sizeof(decision) > 2 )

“sizeof”运算符在编译时计算,而不是运行时。而且它与存储的内容无关。 sizeof 决策是 3,因为您将其定义为包含三个字符。所以这不会测试任何有用的东西。

正如在另一个答案中提到的,C 具有“strcmp”运算符来比较两个字符串。如果你愿意,你也可以编写自己的代码来逐个字符地比较它们。 C++ 有更好的方法来做到这一点,包括字符串类。

这是您可以如何执行此操作的示例:

int StringCompare(const char *s1, const char *s2)
{ // returns 0 if the strings are equivalent, 1 if they're not
  while( (*s1!=0) && (*s2!=0) )
  { // loop until either string runs out
     if(*s1!=*s2) return 1; // check if they match
     s1++; // skip to next character
     s2++;
  }
  if( (*s1==0) && (*s2==0) ) // did both strings run out at the same length?
      return 0;
  return 1; // one is longer than the other
}

关于检查 char 变量的内容 - C 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8372547/

相关文章:

javascript - javascript 中的 setInterval php 变量

javascript - 依赖对象类型检查 Javascript 似乎是多余的

java - 为什么我的第二个 If then 语句无法匹配?

C源分析

c - 如何安全地排出标准输入?

iphone - Objective-C 及其与 C 的关系

javascript - If 语句未触发警报 - 表格/测验

c - 函数定义中的结构变量和结构成员

variables - 具有可变上限的循环

Java 类变量等于相同的值