C 检索/比较文件中的字符串与用户文本

C 检索/比较文件中的字符串与用户文本,c,fopen,fgets,strcpy,C,Fopen,Fgets,Strcpy,我是C语言的新手,我想写一个程序来检查用户输入的单词是否合法。我已经仔细研究了stackoverflow的建议,但很多都是针对某个特定案例的。请在我被激怒之前,我知道这个语法是不正确的,但是我正在寻找一些关于如何修复它的建议。我的主要问题是如何告诉程序检查下一行(在“\0”之后)。也许while条件不是告诉C check的最好方法,除非没有更多的行存在。在下面的代码中,我有一个“userword”的比较字符串示例,我用它来测试,但最终这将是来自用户输入的变量 #include <stdio

我是C语言的新手,我想写一个程序来检查用户输入的单词是否合法。我已经仔细研究了stackoverflow的建议,但很多都是针对某个特定案例的。请在我被激怒之前,我知道这个语法是不正确的,但是我正在寻找一些关于如何修复它的建议。我的主要问题是如何告诉程序检查下一行(在“\0”之后)。也许
while
条件不是告诉C check的最好方法,除非没有更多的行存在。在下面的代码中,我有一个“userword”的比较字符串示例,我用它来测试,但最终这将是来自用户输入的变量

#include <stdio.h>
#include <string.h>

int main (void)
{
    FILE *fp;
    fp = fopen("/usr/share/dict/words", "r");
    char line[50];
    while(fgets(line,50,fp) != NULL)
    {
        if(!strcpy(line,"userword"))
        {
            printf("Word exists\n");
            return 0; 
        }
    }
    printf("Word not found, try again.\n");
    return 0;
}
#包括
#包括
内部主(空)
{
文件*fp;
fp=fopen(“/usr/share/dict/words”,“r”);
字符行[50];
while(fgets(第50行,fp)!=NULL)
{
if(!strcpy(第行,“userword”))
{
printf(“Word存在\n”);
返回0;
}
}
printf(“找不到单词,请重试。\n”);
返回0;
}
strcpy()
复制字符串。您应该使用比较两个字符串的
strcmp()

第二,当你阅读
/usr/share/dict/words
中的一行时,末尾有一个新行。您需要删除换行符(在while之后和if之前添加此换行符):

或者将其与
userword\n

strcpy()
复制字符串进行比较。您应该使用比较两个字符串的
strcmp()

第二,当你阅读
/usr/share/dict/words
中的一行时,末尾有一个新行。您需要删除换行符(在while之后和if之前添加此换行符):

或者将其与
userword\n

strcpy()
复制字符串进行比较。您应该使用比较两个字符串的
strcmp()

第二,当你阅读
/usr/share/dict/words
中的一行时,末尾有一个新行。您需要删除换行符(在while之后和if之前添加此换行符):

或者将其与
userword\n

strcpy()
复制字符串进行比较。您应该使用比较两个字符串的
strcmp()

第二,当你阅读
/usr/share/dict/words
中的一行时,末尾有一个新行。您需要删除换行符(在while之后和if之前添加此换行符):


或者将其与
userword\n

进行比较,我建议
strncmp()
执行此技巧,因为
fgets()
包含换行符:

if(!strncmp(line, "userword", strlen(line) - 1) )

我建议使用
strncmp()
来完成这个技巧,因为
fgets()
包含换行符:

if(!strncmp(line, "userword", strlen(line) - 1) )

我建议使用
strncmp()
来完成这个技巧,因为
fgets()
包含换行符:

if(!strncmp(line, "userword", strlen(line) - 1) )

我建议使用
strncmp()
来完成这个技巧,因为
fgets()
包含换行符:

if(!strncmp(line, "userword", strlen(line) - 1) )

直观地看,似乎我需要另一个嵌套在“while”循环中的循环,该循环在找到每个“\0”后检查文件中的下一个字符串。我可能知道如何寻找结尾字符,但不确定如何进入下一行。或者C是否将此文件视为一个连续字符串,因此我只需要检查每个“\0”之间的字符?
strcpy()
?你是说strcmp()?@jfly是的。我知道我不应该在发烧的时候这样做。多谢你解决了具体的问题,从长远来看,你可能想买一本Jon Bentley的编程珍珠;第一版有一章介绍了这个过程,并描述了从原型到可用程序的过程。此外,“词干分析”字段对于那些在字典中存储起来会很浪费的单词也很有用。直观地看,似乎我需要另一个嵌套在“while”循环中的循环,该循环在找到每个“\0”后检查文件中的下一个字符串。我可能知道如何寻找结尾字符,但不确定如何进入下一行。或者C是否将此文件视为一个连续字符串,因此我只需要检查每个“\0”之间的字符?
strcpy()
?你是说strcmp()?@jfly是的。我知道我不应该在发烧的时候这样做。多谢你解决了具体的问题,从长远来看,你可能想买一本Jon Bentley的编程珍珠;第一版有一章介绍了这个过程,并描述了从原型到可用程序的过程。此外,“词干分析”字段对于那些在字典中存储起来会很浪费的单词也很有用。直观地看,似乎我需要另一个嵌套在“while”循环中的循环,该循环在找到每个“\0”后检查文件中的下一个字符串。我可能知道如何寻找结尾字符,但不确定如何进入下一行。或者C是否将此文件视为一个连续字符串,因此我只需要检查每个“\0”之间的字符?
strcpy()
?你是说strcmp()?@jfly是的。我知道我不应该在发烧的时候这样做。多谢你解决了具体的问题,从长远来看,你可能想买一本Jon Bentley的编程珍珠;第一版有一章介绍了这个过程,并描述了从原型到可用程序的过程。此外,“词干分析”字段对于那些在字典中存储起来会很浪费的单词也很有用。直观地看,似乎我需要另一个嵌套在“while”循环中的循环,该循环在找到每个“\0”后检查文件中的下一个字符串。我可能知道如何寻找结尾字符,但不确定如何进入下一行。或者C是否将此文件视为一个连续字符串,因此我只需要检查每个“\0”之间的字符?
strcpy()
?你是说strcmp()?@jfly是的。我知道我不应该在发烧的时候这样做。非常感谢您解决了具体的问题,从长远来看,您可能想要一份副本