gpt4 book ai didi

c - 当我在单独的 else 语句中修改字符数组时,为什么该函数不返回值 1?

转载 作者:行者123 更新时间:2023-11-30 15:34:48 26 4
gpt4 key购买 nike

首先,在解释发生了什么之前,让我向您展示我的代码:

#include <SoftwareSerial.h>

//Strings
char inData[20]; //Allocate some space for the string
char inChar; //Where to store the character read
byte index = 0; //Index into array; where to store the character

void setup()
{
//Begin Serial Communication
Serial.begin(9600);
}

void loop(void){

//Determine if command mode should be entered
if(Comp("BTMODIFY") == 0)
{
Serial.print("Entering bluetooth command mode...);
}
}

char Comp(char* input){
//Internal variables
int i = 0;

while(Serial.available() > 0) //Don't read unless you know there is data
{
if(index < 19) //One less than the size of the array
{
inChar = Serial.read(); //Read a character
inData[index] = inChar; //Store it
index++; //Increment where to write next
inData[index] = '\0'; //Null terminate the string
}
}

if(strcmp(inData, input) == 0){
index = 0;
inData[index] = '\0';
return(0);
}

else{
index = 0;
inData[index] = '\0';
return(1);
}
}

除了基本的 C 代码之外,此代码还使用了 Arduino 库的部分内容。此代码片段背后的想法非常简单:如果用户输入字符串“BTMODIFY”,则将语句打印到终端窗口。该事件是通过调用函数Comp 来检测的。该函数将串行缓冲区中存储的所有数据复制到字符数组中。这样做可以让我将输入的数据与目标字符串“BTMODIFY”进行比较。

但是,我遇到了一个问题。注意最后一个 else block 。如果我评论这些行:

index = 0;
inData[index] = '\0';

然后代码可以正常运行,这意味着当我输入“BTMODIFY”时,一条语句会打印在我的终端上。正如现在的代码,没有任何反应 - 这意味着 if(Comp("BTMODIFY") == 0) 永远不会计算为 true。显然,我缺少一些东西。

这个想法是重用变量inData,所以我只是在字符串的开头放置一个空终止符。

任何建设性的意见都会受到赞赏。

最佳答案

程序可能陷入无限循环:

  while(Serial.available() > 0) //Don't read unless you know there is data
{
if(index < 19) //One less than the size of the array
{
inChar = Serial.read(); //Read a character
...
}
}

考虑一下这种情况,当 Serial.available() > 0index >= 19 时。数据未被读取,while 循环继续。

尝试添加else break;:

  int truncated = 0;
while(Serial.available() > 0) //Don't read unless you know there is data
{
if(index < 19) //One less than the size of the array
{
inChar = Serial.read(); //Read a character
inData[index] = inChar; //Store it
index++; //Increment where to write next
inData[index] = '\0'; //Null terminate the string
}
else
{
truncated = 1;
break;
}
}

if(truncated && strncmp(inData, input, 19) == 0){
index = 0;
inData[index] = '\0';
return(0);
}
else if(!truncated && strcmp(inData, input) == 0) {
...
}
else {
...
}

或者,您可以重写 Comp 函数:

int Comp(char* input) {
//Internal variables
int i = 0;

int curr = 0;
while(Serial.available() > 0) //Don't read unless you know there is data
{
if(index < 19) //One less than the size of the array
{
inChar = Serial.read(); //Read a character
if(input[curr] == '\0') return 0; // Input ended, but data is still there.
if(input[curr++] != inChar) return 0; // Data doesn't match.
}
else return 1; // Data matches.
}

return 1; // Data matches.
}

关于c - 当我在单独的 else 语句中修改字符数组时,为什么该函数不返回值 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23167105/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com