关于 C 的 itoa() 和 char 数组问题(连接 LCD)
Issue with itoa() and char array in regards to C (interfacing an LCD)
尽量简短;我正在尝试对 LCD 进行编程以打印出一个整数变量(超过 1 位)。我正在尝试使用 itoa 函数来执行此操作,因为 LCD 采用 ASCII 字符。下面的代码在我想要的时候编译并打印 "Set Temp: " ,问题是它没有像我想要的那样打印出存储在 numberString 数组中的字符(数字)。 writeString 函数工作正常,但我不明白为什么它在 "Set Temp: " 之后不打印 int setTemp 的值。输出的只是:"Set Temp: ",光标悬空。
可能值得一提的是,光标悬在 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 中)是
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
的错误)。
尽量简短;我正在尝试对 LCD 进行编程以打印出一个整数变量(超过 1 位)。我正在尝试使用 itoa 函数来执行此操作,因为 LCD 采用 ASCII 字符。下面的代码在我想要的时候编译并打印 "Set Temp: " ,问题是它没有像我想要的那样打印出存储在 numberString 数组中的字符(数字)。 writeString 函数工作正常,但我不明白为什么它在 "Set Temp: " 之后不打印 int setTemp 的值。输出的只是:"Set Temp: ",光标悬空。
可能值得一提的是,光标悬在 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 中)是
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
的错误)。