奇怪的回归;返回int的函数的行

时间:2013-09-27 16:15:33

标签: c char

我现在正在学习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):”并且将该问题打印到屏幕上,然后允许用户输入yes或no并将其存储在一个名为“answer”的数组中......但这看起来它会返回一个char ...或者其他东西....一个int ....为什么返回行中有一个=='y'?对于我的生活,我无法弄清楚这个函数的返回行是做什么的。一些帮助将是muchas gracias。

4 个答案:

答案 0 :(得分:2)

  

但看起来它会返回一个char ......或者其他东西......而不是int

不,但这也不是问题。积分类型可以隐式转换为另一个,因此从声明为返回char的函数返回int是完全正常的。

除此之外,C中的比较运算符产生int - 如果比较中的premissa为真,则为1,否则为0。此函数基本上测试输入的字符串的第一个字符是否为'y'

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

看到你最近的编辑,你要返回的是比较答案[0] ==“y”的结果,它是一个整数。

++++++++++

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

然后打印该参数后跟(y / n)并等待stdin中的某些用户输入。

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

答案 3 :(得分:0)

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

相关问题