我的提示如下:
编写名为alternator的函数的定义,该函数不接收任何参数,并在第一次调用时返回1,在下次调用时返回0,然后返回1,0等等,在连续调用时在1/0之间交替
我的尝试是:
int alternator(void) {
static int x = 0;
if(x == 0) {
return 1;
}
else if (x % 2 == 0) {
return 1;
x++;
}
else {
return 0;
x++;
}
}
我哪里出错了?
答案 0 :(得分:4)
我更喜欢xor
,因为如果您可以拨打alternator
的时间没有数字上限:
int alternator(void) {
static int x = 0; // set to 1 if you want 0 as first value...
return x ^= 1;
}
演示:
int main(int argc, char *argv[]) {
for(int i=0; i<10; i++){
printf("%d %d\n", i, alternator());
}
}
打印:
0 1
1 0
2 1
3 0
4 1
5 0
6 1
7 0
8 1
9 0
正如评论中所指出的,你也可以这样做:
int alternator(void) {
static int x = 0;
return x = !x;
}
答案 1 :(得分:1)
x++
之后你有return
,所以增量永远不会发生。
答案 2 :(得分:1)
像这样:
int alternator(void) {
static int x = 0;
return x ^= 1;
}
答案 3 :(得分:0)
如果函数在返回执行后没有返回任何内容。
目前运行时你的功能如下:
int alternator(void) {
static int x = 0;
if(x == 0) {
return 1;
}
}
因为这就是将要执行的所有内容。
您需要做的是每次运行函数时更改x
的值,然后返回该值。
一个简单的if
语句,可以检测x
的值是1
还是0
就足够了。
通常在函数末尾只有一个return语句并操作函数中的返回值也是一个好主意。这使代码更易读,更容易理解。
合理的尝试看起来像:
int alternator(void) {
static int x = 0;
if(x == 0)
{
x = 1;
}
else
{
x = 0;
}
return x;
}
答案 4 :(得分:0)
下面突出显示的代码是无法访问的代码:
else if(x%2 == 0){ 返回1; 的 X ++; 强> } 其他{ 返回0; 的 X ++; 强> }