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