2012-10-25 91 views
1

我不得不问这个问题令人难以置信的愚蠢,但我该如何处理返回值?如何处理Arduino返回

例如,我有这样的代码:

int x = 0; 

void setup(){ 
    Serial.begin(9600); 
} 

void loop(){ 
    int y = calc(x); 
    Serial.println(y); 

    delay(500); 
} 

int calc(int nmbr){ 
int i = nmbr + 1; 
return i; 
} 

如何使其成为X上升?基本上,我想看看它走0,1,2,3,4,5等,等等我知道这很容易做一个for(),但我想知道如何处理返回值,而不是如何处理创建一个计数器。

解决方案可能非常简单,当我看到它时我会面对面的,但过去30分钟我一直在看我的屏幕,而我完全停留在此。

+2

如何处理返回值是什么意思? – iabdalkader

+0

好吧,我该如何改变x使它增加?基本上,x应该改变为calc()的返回值() – Cleverbird

回答

2

你不改变x,你改变另一个变量nmbr,因为你传递x的价值,那就是x副本,您可以按引用传递,或因为x是全球性的,你可以只是这样做:

int calc() { 
return x++; 
} 

不过说真的,你应该只使用一个for循环:)

int x; 
for (x=0; x<10; x++) { 
    Serial.println(x); 
} 
+0

我知道,我只是将这个小小的代码作为一个例子。而且我知道解决方案很容易,而且我确实现在面临着...谢谢你,好先生或女士! – Cleverbird

+0

不客气:) – iabdalkader

0

尝试:

int y = 0; 

void setup(){ 
    Serial.begin(9600); 
} 

void loop(){ 
    y = calc(y); 
    Serial.println(y); 

    delay(500); 
} 

int calc(int nmbr){ 
int i = nmbr + 1; 
return i; 
} 
1

Mux的回答很好。我会添加更多的品种。首先,刚分配函数的返回值回x

loop() { 
    x = calc(x); 
    Serial.println(x); 
} 

二,使用呼叫通过引用,在这里你将指针传递给x代替x值。

void loop() { 
    int y = calc(&x); 
    Serial.println(y); 
} 

int calc(int *nmbr) { 
    *nmbr++; 
} 

这将真正对你有好处阅读"The C Programming Language"获得语言的窍门和它的可能性。祝你好运:-)

干杯,

0

,而不用声明为INT的,你可以有静态声明INT。

#include <stdio.h> 


void func() { 
    static int x = 0; // x is initialized only once across three calls of func() and x will get incremented three 
          //times after all the three calls. i.e x will be 2 finally 
    printf("%d\n", x); // outputs the value of x 
    x = x + 1; 
} 

int main() { //int argc, char *argv[] inside the main is optional in the particular program 
    func(); // prints 0 
    func(); // prints 1 
    func(); // prints 2 
    return 0; 
}