sscanf() 的问题不会读取 char 数组中的每个 0

Posted

技术标签:

【中文标题】sscanf() 的问题不会读取 char 数组中的每个 0【英文标题】:Problem with sscanf() doesn't read every 0 that is in char array 【发布时间】:2020-04-02 15:30:04 【问题描述】:

我需要从我的 char 数组中提取数字,它以 hh:mm 格式存储值(例如 20:20) 我尝试使用 sscanf 函数将 hh 提取到小时变量和 mm 到分钟变量。 它工作得很好,直到时间类似于 0number:0number 或者它是 00:00 ..它只返回没有 0 或只有一个 0 的数字。当它读取第一个 0 时,它是否有可能将其视为某事否则,不是数组值的一部分?感谢您的任何回答。

char time[15]; ///where I store the time value 
Serial.println(time); //prints nicely something like 02:02
int hour;
int minute;

sscanf(incas,"%02d:%02d",&hour,&minute); 
Serial.println(hour);  ///prints 2
Serial.println(minute); ///prints 2

【问题讨论】:

您正在读取一个整数,没有 01 这样的数字,它是 1。问题在于您的打印,因为您打印数字并希望打印 01 而不是 1。:)跨度> 哦,好的,谢谢你,我真的没有这样想,这是有道理的:D 【参考方案1】:

问题不在于您对sscanf 的调用,而在于对println 的调用。试试这个:

char time[15]; ///where I store the time value 
Serial.println(time); //prints nicely something like 02:02
int hour;
int minute;

sscanf(incas,"%02d:%02d",&hour,&minute); 
char strBuf[3];
sprintf(strBuf, "%02d", hour);//hour is an int, so you need to pad with leading 0's
Serial.println(strBuf);  ///prints 2
sprintf(strBuf, "%02d", minute);
Serial.println(strBuf); ///prints 2

【讨论】:

是的,谢谢,我的主要问题实际上不是打印出来,但我想使用那个值..但是现在当我想到它时,我真的很愚蠢,实际上不需要那些零 :D 下次我必须更加努力地思考我的问题并有所不同【参考方案2】:

int 对前导零一无所知。 0000000000000123 == 123。如果你想要前导零,你必须自己格式化。

hourminute 转换回char 数组的示例:

char out[15];
sprintf(out, "%02d:%02d", hour, minute);
Serial.println(out);

【讨论】:

谢谢我现在明白了:) 技术上取决于上下文,0000000000000123 != 123,因为 0000000000000123 是八进制文字 :) 不是 %d。 @eerorika :schsss... :-D

以上是关于sscanf() 的问题不会读取 char 数组中的每个 0的主要内容,如果未能解决你的问题,请参考以下文章

不能在 C 中将 sscanf() 用于 char 数组

如何从c ++中的文件中读取双精度

C语言中如何用gets();语句来接收一个二维数组

读取文件信息,并通过sscanf从中获取所需数据

字符与数字的转换:sprintf和sscanf

74.sscanf数据扫描