我正在寫一個arduino串行通信代碼,我將通過串行通信發送句子,如「azyb」+句子+「byza」,其中第一部分和第二部分用於識別我的句子將要開始和結束。我的代碼是在這裏(只是給循環功能等的正常工作):爲什麼這個奇怪的無限循環發生?
void loop()
{
if (Serial.available() > 0)
{
int i=0, j=0, len=0;
char *sentance;
String line = Serial.readString();
len = line.length();
Serial.println(len);
Serial.println(line);
for (; i < len; i++)
if (line[i] == 'a' && line[i+1] == 'z' && line[i+2] == 'y' && line[i+3] == 'b'){
//first if
Serial.println("First");
i += 4;
while (i < len){
sentance[j] = line[i];
i++; j++;
if (line[i+1] == 'b' && line[i+2] == 'y' && line[i+3] == 'z' && line[i+4] == 'a'){
// second IF
Serial.println("Second");
sentance[j] = 'NULL';
encry_flag = true;
i = i + 4;
line = "";
break;
}
}
}
if (!encry_flag){
Serial.println("No code is send");
Write_text("damn "); // to write text in OLED display
}
else{
Serial.println(sentance);
Write_text(sentance); // to disply sentence in OLED display
encry_flag = false;
}
// clear the buffer
while (Serial.available() > 0)
char c= Serial.read();
}
}
但是,當我發送一個有效的句子,如「azybanklonbyza」將在OLED顯示屏顯示「anklon」,代碼被困成無限循環,如果條件成立,它會先到達第一個條件,但如果條件成立,則永遠不會運行到第二個條件,然後向後循環,這不應該像這樣起作用。
這個無限循環不檢查條件要麼encry_flag是真或假,並且永遠不會去到緩衝區被清除的語句。 從截圖中,您可以理解for循環中的for循環和while循環會因爲總的字符串被一次又一次地打印而在循環之前僅執行一次。
從哪裏創建這個無限循環?我完全迷失了。如果在開始和結束時沒有添加「azyb」和「byza」,代碼運行得很好,因爲它從來沒有滿足任何條件。我也嘗試使用一個字符(「azybhbyza」打印「h」),但結果是一樣的。
我的變量i在聲明句子指針之前被初始化,所以句子的存儲器不能破壞我的值,據我所知。 – Anklon
好吧,我不知道哥們 – Soulslayer