CHAR 比较是正确的,即使它是错误的
CHAR Compare is right, even when it's wrong
首先我是 C++ 编程的新手,目前我遇到了一个可能非常简单的问题。
我想,在让其他东西工作之后,在我看来,更加努力,我将实现一些字符串比较,我准备好了,哈哈......
我试图弄清楚问题是什么,并从几个小时开始就在努力...
我尝试进行字符串比较。
通过串行打印,我看到了正确的字母。例如,我比较“A”和“B”。
我的问题是,这个比较是正确的,即使它是错误的。
bool debug = true;
void setup() {
// put your setup code here, to run once:
if (debug) { Serial.begin(9600); }; // Initialize serial communications with the PC
}
void loop() {
int result;
char myWord[6] = "#VOGEL";
char wordBuff[5];
char wordLetter;
char letterBuff;
// I do this here, because actually i get all values from two RFID Reader
strncpy( wordBuff, &myWord[1], 5 );
wordBuff[5] = '[=10=]';
for (int fieldNr = 0; fieldNr < 5; fieldNr++)
{
wordLetter = wordBuff[fieldNr];
letterBuff = 'L';
result = strcmp(letterBuff,wordLetter); // Should be every time wrong? But it is sometimes true?
if ( result == 0)
{
if(debug){ Serial.print(F("Right Field: "));Serial.println(fieldNr);
Serial.print(F(" LetterA: "));Serial.print(wordLetter);Serial.println(F("#"));
Serial.print(F(" LetterB: "));Serial.print(letterBuff);Serial.println(F("#"));}
}
else
{
if(debug){ Serial.print(F("Wrong Field: "));Serial.println(fieldNr);
Serial.print(F(" LetterA: "));Serial.print(wordLetter);Serial.println(F("#"));
Serial.print(F(" LetterB: "));Serial.print(letterBuff);Serial.println(F("#"));}
}
}
delay(1000); //NUR für TESTZWECKE
}
strcmp 仅适用于 const char *,而不是像您正在使用的单个 char。
我不记得 Arduino 是否允许您使用 std::string 但以防万一就使用它。
它向您介绍了更多的字符串处理方法。像s.find(c)那样return直接就是char在字符串中的位置。
顺便说一下,要比较 2 个字符,在您的示例中,只需使用一个简单的:
if(c1 == c2)
...
else
...
应该可以解决。
首先我是 C++ 编程的新手,目前我遇到了一个可能非常简单的问题。 我想,在让其他东西工作之后,在我看来,更加努力,我将实现一些字符串比较,我准备好了,哈哈...... 我试图弄清楚问题是什么,并从几个小时开始就在努力...
我尝试进行字符串比较。 通过串行打印,我看到了正确的字母。例如,我比较“A”和“B”。 我的问题是,这个比较是正确的,即使它是错误的。
bool debug = true;
void setup() {
// put your setup code here, to run once:
if (debug) { Serial.begin(9600); }; // Initialize serial communications with the PC
}
void loop() {
int result;
char myWord[6] = "#VOGEL";
char wordBuff[5];
char wordLetter;
char letterBuff;
// I do this here, because actually i get all values from two RFID Reader
strncpy( wordBuff, &myWord[1], 5 );
wordBuff[5] = '[=10=]';
for (int fieldNr = 0; fieldNr < 5; fieldNr++)
{
wordLetter = wordBuff[fieldNr];
letterBuff = 'L';
result = strcmp(letterBuff,wordLetter); // Should be every time wrong? But it is sometimes true?
if ( result == 0)
{
if(debug){ Serial.print(F("Right Field: "));Serial.println(fieldNr);
Serial.print(F(" LetterA: "));Serial.print(wordLetter);Serial.println(F("#"));
Serial.print(F(" LetterB: "));Serial.print(letterBuff);Serial.println(F("#"));}
}
else
{
if(debug){ Serial.print(F("Wrong Field: "));Serial.println(fieldNr);
Serial.print(F(" LetterA: "));Serial.print(wordLetter);Serial.println(F("#"));
Serial.print(F(" LetterB: "));Serial.print(letterBuff);Serial.println(F("#"));}
}
}
delay(1000); //NUR für TESTZWECKE
}
strcmp 仅适用于 const char *,而不是像您正在使用的单个 char。
我不记得 Arduino 是否允许您使用 std::string 但以防万一就使用它。 它向您介绍了更多的字符串处理方法。像s.find(c)那样return直接就是char在字符串中的位置。
顺便说一下,要比较 2 个字符,在您的示例中,只需使用一个简单的:
if(c1 == c2)
...
else
...
应该可以解决。