【问题标题】:strange return; line for a function that returns an int奇怪的回报;返回 int 的函数的行
【发布时间】:2013-10-04 00:46:56
【问题描述】:

我现在正在学习 C 并且正在使用一本相当不错的书来学习(无论如何它让事情变得很容易理解......)但我遇到了一些我似乎无法理解的东西,并且会就像对这行特定代码“在做什么”的解释......

函数如下:

int yes_no(char *question)
{
   char answer[3];
   printf("%s? (y/n): ", question);
   fgets(answer, 3, stdin);
   return answer[0] == 'y';
}

所以从我目前对 C 编程的理解来看,这个函数应该返回一个 int,它需要一个在这个函数之外的某个地方创建的字符串,在它的末尾添加一个“?(y/n):”,然后将该问题打印到屏幕上,然后允许用户输入是或否并将其存储在一个名为“answer”的数组中......但这看起来会返回一个字符......或其他东西......不是一个 int ......为什么返回行中有一个 == 'y' ?对于我的生活,我无法弄清楚这个函数的返回线在做什么。一些帮助会非常感谢。

【问题讨论】:

  • 您应该阅读 C 入门教程。

标签: c char


【解决方案1】:

但这看起来会返回一个字符......或其他东西......而不是一个int

不,但这也不是问题。整数类型可以隐式转换为另一种,因此从声明为返回 int 的函数返回 char 非常好。

除此之外,C 中的比较运算符产生int——如果比较中的前提为真,则为 1,否则为 0。该函数主要测试输入字符串的第一个字符是否为'y'

【讨论】:

    【解决方案2】:

    看到您最近的编辑,您返回的是比较 answer[0]=="y" 的结果,它在 C 中是一个整数。

    ++++++++++

    你的函数接收一个参数,一个指向 char 的指针,我们可以假设它是一个字符串。

    然后打印该参数,后跟 (y/n) 并在标准输入中等待一些用户输入。

    当你得到那个输入时,你检查它的第一个字符,如果是 Y,你返回 1~true,如果不是,你返回 0~false

    【讨论】:

    • 好的,我明白了,我只是在这方面还是新手,只习惯于在“if”语句中查看比较。我以为那是你唯一会使用它们的地方。我不知道您仍然可以在使用它们的任何地方从它们那里返回 1 或 0。很高兴知道!感谢您的提示!
    【解决方案3】:

    返回答案[0] == 'y';

    实际上将返回一个 int,如果答案以 'y' 开头,则返回 1;如果答案不是以 'y' 开头的任何其他内容,则返回 0

    【讨论】:

    • 抱歉,计算结果为 int 值 1 或 0
    【解决方案4】:

    answer[0] == 'y' 被评估为布尔值,所有布尔值将被提升为 int,并给你 1 或 0 作为返回值。 检查这个: Can I assume (bool)true == (int)1 for any C++ compiler?

    【讨论】:

    • answer[0] == 'y' 被评估为布尔值”——不,它是 int
    • 问题是c,不是c++
    猜你喜欢
    • 2015-12-22
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 2019-05-29
    • 1970-01-01
    • 2020-12-17
    相关资源
    最近更新 更多