我正在努力解决Serial.print()和printf()输出的差异。我正在编程ESP8266,下面的代码是控制我的wifi连接的一块。代码在启动时执行,并打印它检测到的WIFI网络以及连接到所选网络之一的状态。我遇到的问题是Serial.print("链接状态:\ t \ t");和printf("链接状态:\ t \ t"); WL_DISCONNECTED案例中的行:代码块。根据我编译的哪一行,我有不同的输出!我希望有一个人可以告诉我为什么以及可以做些什么。
case WL_INIT: { // #7 added to start the initialization
wifi.dt = 1000;
WiFi.hostname(infra.host);
wifi.netcnt = WiFi.scanNetworks();
for (n = 0; n < wifi.netcnt; n++) printf("%2d: SSID: %-20s, RSSI: %3d , Encryp: %2d\n", n, WiFi.SSID(n).c_str(), WiFi.RSSI(n), WiFi.encryptionType(n));
Serial.print("Link Status: \t\t ");
// printf("Link Status: \t\t "); // is not printed at the correct location
wifimode(wifi.mode);
}
break;
case WL_DISCONNECTED: { // #6 after 50 seconds no correct password, status changes to CONNECT_FAILED
wifi.dt = 1000;
wifi.stat = WiFi.status();
printf(".%u",wifi.stat);
// Serial.print(".");Serial.print(wifi.stat); // with printf this has a different result.
timeout++;
&LT;在Serial.print的情况下输出(&#34;。&#34;); Serial.print(wifi.stat); //使用printf这有不同的结果。 &GT;
0: SSID: INFINITUMEDFF_2.4 , RSSI: -92 , Encryp: 4
1: SSID: INFINITUM_A5A098 , RSSI: -81 , Encryp: 8
2: SSID: Grasmeent , RSSI: -46 , Encryp: 8
3: SSID: INFINITUM8D73 , RSSI: -43 , Encryp: 8
4: SSID: INFINITUM8D73 , RSSI: -58 , Encryp: 8
Link Status: .6.6.6.3
Connected to: SSID: INFINITUM8D73
IP address: 192.168.1.65
&LT;在printf的情况下输出(&#34;。%u&#34;,wifi.stat);; //使用Serial.print,它有不同的结果。 &GT;
0: SSID: Grasmeent , RSSI: -46 , Encryp: 8
1: SSID: INFINITUM8D73 , RSSI: -39 , Encryp: 8
2: SSID: INFINITUM8D73 , RSSI: -56 , Encryp: 8
3: SSID: INFINITUM_A5A098 , RSSI: -82 , Encryp: 8
Link Status:
.6.6.6.3Connected to: SSID: INFINITUM8D73
IP address: 192.168.1.65
带有printf()的示例(最后一个块)由于某种原因在&#34;链接状态&#34;之后产生CRLF。生成&#34; .6.6.6.3&#34;。基于Serial.print()的第一个例子并没有这样做,并减慢了我已经尝试混合Serial.print和printf()的一个很好的在线输出,它们生成了不同的布局。如果我切换到只有printf()基于输出,如第一个块中指示的输出好看,这似乎是不可能的。有人能告诉我什么问题是搞砸了我的printf()输出。 为什么printf和Serial print会生成不同的打印布局。