gpt4 book ai didi

c - fgetc() 没有像我希望的那样工作

转载 作者:太空宇宙 更新时间:2023-11-04 07:19:43 27 4
gpt4 key购买 nike

我希望我不会因为这个而很快被否决,但我有一个我正在为学校工作的项目,我必须在其中构建一个拼写检查器。我决定使用 trie,它似乎工作正常,但我有一个我找不到的错误。我认为问题出在以下,

bool load(const char* dictionary)
{

if (!rootNode)
{
rootNode = trieNodeCreate();
if (!rootNode)
{
printf("could not allocate root node");
return false;
}
}

// Open the file
FILE* fp = fopen(dictionary, "r");

if (fp == NULL)
{
printf("could not open dictioanry %s\n", dictionary);
return false;
}


int index = 0;
for (int c = fgetc(fp); c != EOF; c = fgetc(fp))
{
char word[LENGTH];
if (c != '\n' )
{
word[index] = c;
index++;
}
else
{
trieWordInsert(word, rootNode);
index = 0;
wordCount ++;

}

}
fclose(fp);

if (wordCount)
{
return true;
}
return false;
}

但是我一直没找到。该项目的其余部分可以在

https://github.com/iMillJoe/spell-checker

最佳答案

在循环外声明你的 word[LENGTH] 数组,否则它只会丢弃 word 指针并在每个循环结束时释放分配的,创建一个新的一个。我不认为你想要那个,我认为你宁愿只在 if 条件不满足时才想要那个。

我可能不知道 trieWordInsert 的作用,但我假设您需要一个 0 终止符。

  • for( ... ) { ... } 之前声明 word[LENGTH] = { 0 };
  • else block 中添加一个 memset( word, 0, LENGTH);
  • memset 添加 memory.hstring.h 如果您目前还没有包含其中任何一个

我认为这应该是...

编辑:在了解了 trieWordInsert 或多或少如何发出插入的 word 之后...

EZ 模式的直接代码:

bool load( const char* dictionary )
{

if ( !rootNode )
{
rootNode = trieNodeCreate( );
if ( !rootNode )
{
printf( "could not allocate root node" );
return false;
}
}

// Open the file
FILE* fp = fopen( dictionary, "r" );

if ( fp == NULL )
{
printf( "could not open dictioanry %s\n", dictionary );
return false;
}

int index = 0;
char word[LENGTH];
for ( int c = fgetc( fp ); c != EOF; c = fgetc( fp ) )
{
if ( c != '\n' )
{
word[index] = c;
index++;
}
else
{
word[index] = 0;
trieWordInsert( word, rootNode );
index = 0;
wordCount++;
}

}
fclose( fp );

if ( wordCount )
{
return true;
}
return false;
}

关于c - fgetc() 没有像我希望的那样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22286136/

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