4

尽量简明扼要;我正在尝试对 LCD 进行编程以打印出一个整数变量(超过 1 位)。我正在尝试使用 itoa 函数来执行此操作,因为 LCD 需要 ASCII 字符。下面的代码在我想要的时候编译并打印“Set Temp:”,问题是它没有像我想要的那样打印出存储在 numberString 数组中的字符(数字)。writeString 函数工作正常,但我不知道为什么它只是在“Set Temp:”之后不打印 int setTemp 的值。输出的只是:“设置温度:”,光标刚刚挂起。

可能值得一提的是,光标挂在 LCD 上应该打印值的位置,表明它不只是打印一个空值,它根本不打印任何东西或等待什么东西。

对任何不正确的问题格式表示歉意,我是新手。

void writeChar(unsigned char ch)
{
  lcd = ch;
  RS = 1;
  RW =0;
  E = 1;
  lcdDelay();
  E=0;
}

void writeString(char *stringToLcd)
{
  while(*stringToLcd > 0)
  {
    writeChar(*stringToLcd++);
  }
}



int changeTriggTemp(void)
{
  char numberString[4]; //buffer, -99 -> 99
  int setTemp = 50;

  clearDisplay();
  writeString("Set Temp: ");

  itoa(setTemp,numberString,10);
  lcdDelay();

  writeString(numberString);

  while(1); //placeholder before I return the int I want

}
4

1 回答 1

1

如果您没有定义函数原型,编译器可能会对它做出错误的假设,并错误地对其使用进行编码。引起您的注意后,我问了定义是什么,因为通常的定义(至少在 MSVC 中)是

char *itoa(int value, char *str, int radix);

这与您自己对该功能的使用一致,

itoa(setTemp, numberString, 10);

但是,在仔细检查您的库头文件时,您说它定义了

itoa(char * buf, int val, int base);

换句话说,前两个参数是交换的。由于itoa()不是标准函数,因此这是允许的,但您必须相应地调用它:

itoa(numberString, setTemp, 10);

(感谢@Eric,他的建议表明这很可能是itoa错误的)。

于 2015-12-09T16:00:11.257 回答