error: void value not ignored as it ought to be in Arduino

error: void value not ignored as it ought to be in Arduino

这是一个将1位数字转换为3位数字的函数。例如将“2”转换为“002”。

void loop() {
 int x = convertdigit(time);
}

void convertdigit(int num){
  char buffer[50];
  int n;
  n=sprintf (buffer, "%03d",num);
  return buffer;
}

错误:void 值没有被忽略,因为它应该被忽略

/sketch/sketch.ino: In function 'void loop()':
/sketch/sketch.ino:33:30: error: void value not ignored as it ought to be
     int x = convertdigit(time);
                              ^
Error during build: exit status 1

我可以知道如何解决吗?

当你写这个的时候,你是在告诉编译器 convertdigit 没有 return 任何东西(void):

void convertdigit(int num)

当你写这个的时候,你是在告诉编译器使用 convertdigit 的 return 值并将它存储在 x:

int x = convertdigit(num);

这两件事是冲突的:如果 convertdigit 没有 return 任何东西,你怎么能在 x 中存储任何东西?您的代码有点混乱,所以我不确定您的实际意图,但既然我已经解释了该错误消息,我希望您能够取得进展。

提示:如果您想要 convertdigit 到 return 和 int,请将 void convertdigit(... 更改为 int convertdigit(...

您应该将数字 ( 2 ) 与文本“002”区分开来

void loop() {
 static byte n = 1; 
 char* txt = convertdigit(n); // Convert to a 2 character text with a leading zero, if necessary;
 Serial.println(txt);
 delay(100); 
 n++; 
 if (n > 99) n=0; 
}

char* convertdigit(byte num) {
   static char buffer[4];
   sprintf (buffer, "%02d", num);
   return buffer;
}

static 需要在函数结束后保持变量可用(类似于全局变量):

n 在下一轮循环中保留其增加的值。

buffer 可通过 return 值在 converdigit() return 之后获得。