1

我现在正在学习 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):”并打印那个问题到屏幕上,然后允许用户输入是或否并将其存储在一个名为“答案”的数组中......但这看起来它将返回一个字符......或其他东西......而不是一个int。 ...为什么在返回行中有一个 == 'y' ?对于我的生活,我无法弄清楚这个函数的返回线在做什么。一些帮助将是非常感谢的。

4

4 回答 4

2

but this looks like it will return a char... or something.... not an int

No, but that wouldn't be a problem either. Integral types can be implicitly converted one to another, so returning a char from a function that's declared to return an int is perfectly fine.

Apart from that, comparison operators in C yield an int -- one if the premissa in the comparison is true, and zero otherwise. This function basically tests if the first character of the entered string is a 'y'.

于 2013-09-27T16:19:35.863 回答
1

Return answer[0] == 'y';

will actually return a int, a 1 if the answer starts with 'y' and a 0 if the answer was anything else that did not start with a 'y'

于 2013-09-27T16:19:41.427 回答
1

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

++++++++++

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

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

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

于 2013-09-27T16:22:04.080 回答
0

answer[0] == 'y' is evaluated to a bool, all bools will be promoted to int, and give you 1 or 0 as the return value. check this: Can I assume (bool)true == (int)1 for any C++ compiler?

于 2013-09-27T16:19:04.910 回答