Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于C(与LCD接口)的itoa()和字符数组问题_C_Lcd_Itoa - Fatal编程技术网

关于C(与LCD接口)的itoa()和字符数组问题

关于C(与LCD接口)的itoa()和字符数组问题,c,lcd,itoa,C,Lcd,Itoa,尽量简短;我正在尝试编程一个LCD来打印一个整数变量(超过1位)。我正试图使用itoa函数来实现这一点,因为LCD采用ASCII字符。下面的代码编译并打印“Set Temp:”当我需要它时,问题是它没有像我希望的那样打印出存储在numberString数组中的字符(数字)。writeString函数工作正常,但我不明白为什么它只是在“Set Temp:”之后不打印int settmp的值。所有的输出是:“设置温度:”与光标刚刚挂起 可能值得一提的是,光标挂在应该在LCD上打印值的位置,这表明它不

尽量简短;我正在尝试编程一个LCD来打印一个整数变量(超过1位)。我正试图使用itoa函数来实现这一点,因为LCD采用ASCII字符。下面的代码编译并打印“Set Temp:”当我需要它时,问题是它没有像我希望的那样打印出存储在numberString数组中的字符(数字)。writeString函数工作正常,但我不明白为什么它只是在“Set Temp:”之后不打印int settmp的值。所有的输出是:“设置温度:”与光标刚刚挂起

可能值得一提的是,光标挂在应该在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

}

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

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

itoa(setTemp, numberString, 10);
然而,在仔细检查库头文件时,您声明它定义了

itoa(char * buf, int val, int base);
换句话说,前两个参数是切换的。由于
itoa()
不是标准函数,因此允许这样做,但您必须相应地调用它:

itoa(numberString, setTemp, 10);

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

为什么不“sprintf(str,“Set Temp:%d”,settep)”;如果你写下数字,然后写下
writeString(“Set Temp:”)
itoa
实际上不是标准的,您可以尝试使用此实现吗?(注意:对于负数/非十进制输出/正确写入'0'需要修改)`void alt_itoa(int number,char*dest){int cursor=0;而(number>0){dest[cursor++]='0'+(number%10);number/=10;}dest[cursor]='\0';}`@Nick您的编译器的
stdlib.h
中的
itoa
的函数原型是什么?@Eric感谢您的赞扬,您的评论为我们铺平了道路。@Nick我已经冒昧地将我们的conva浓缩成了一个答案;)
itoa(numberString, setTemp, 10);