我正在尝试编写一个程序来检查输入到程序的单词是否与预定义的关键字匹配。输入将来自文本文件,文本文件中将包含一个单词。到目前为止我的文本文件中只有“crackerjack”这个词,这意味着该程序应该清楚地打印出“Match Found”,但目前还没有这样做。这是我的代码,你们有什么突出的吗?感谢
#define NUM 4
#define SIZE 11
int isAlpha(char);
//Returns 1 if it is an Alphabetical character, 0 if it is not
int isAlpha(char c) {
return (c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z');
}
int main() {
char message[141];
int charCount = 0, c = 0, matchCheck = 0;
char keywords[NUM][SIZE] = {
"crackerjack",
"Hey",
"dog",
"fish"
};
//Removes non alphabetical characters
while((c = getchar()) != EOF && charCount <= 140) {
if(isAlpha(c)){
message[charCount] = c;
charCount++;
}
printf("%d", isAlpha(c));
}
//checks if message matches keyword
for (int i = 0; i < NUM; i++) {
for (int j = 0; j < SIZE; j++) {
//Check if current two characters match
if (message[j] == keywords[i][j]) {
//Check if the two matched characters are the null terminator character
if (message[j] == '\0' && keywords[i][j] == '\0')
matchCheck = 1;
break;
}
//if characters are not the same, break from loop
else {
break;
}
}
}
//prints "Match Found!" if there was a match
if (matchCheck == 1) {
printf("Match Found!\n");
}
}
答案 0 :(得分:2)
您的代码中存在3个问题。其中两个已经得到解决:
确保SIZE足够大,可以在最长关键字的末尾添加'\0'
确保文本文件在单词的末尾包含'\0'
。如果不是这种情况或它不受你的控制,你可以在阅读后用'\0'
手动结束字符串。
您在第二个if
声明中缺少括号。这会导致每次输入第一个break
语句时都会执行if
语句。
答案 1 :(得分:1)
SIZE
太小了。为'\0'
腾出空间。
#define SIZE 12
char keywords[NUM][SIZE] = {
"crackerjack",
...
};
我现在看到这实际上是@ user3121023所说的。感谢@ user3121023。