用于验证单词是否在文件中并打印行号和行本身的程序

时间:2017-03-29 14:36:48

标签: c

正如标题所示,我正在尝试制作一个程序来验证一个单词是否在文件中并打印行号和行本身。练习告诉我们使用函数strstr。

这是我的代码:

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

#define DIM_WORDS 1000

int main(void)
{
    char word[DIM_WORDS]={'\0'};
    char textname[DIM_WORDS]={'\0'};
    char stringtoread[DIM_WORDS]={'\0'};
    char line[DIM_WORDS]={'\0'};
    char* verify;
    FILE* fp=NULL;
    int ret=0 , num=0;

    do{
        printf("Introduza o nome do ficheiro e a palavra a procurar\n");
        // Lê ambas as informações e guarda-as numa string
        fgets(stringtoread, DIM_WORDS, stdin);
        // Separa as duas informações em 2 strings
        ret=sscanf(stringtoread, "%s %s", textname, word);
    }while(ret!=2);


    fp=fopen(textname, "r");

    if(fp==NULL)
    {
        printf("Error: That file doesn't exist or could not be open\n");
        exit(EXIT_FAILURE);
    }

    while(fgets(line, sizeof(line), fp))
    {

        verify = strstr(word, line);

        if(verify!=NULL)
        {
            printf("The word was encountered in line %d\n", num);
            printf("%s", line);
        }

        num++;

    }


    fclose(fp);

    return EXIT_SUCCESS;

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

#define DIM_WORDS 1000

int main(void)
{
    char word[DIM_WORDS]={'\0'};
    char textname[DIM_WORDS]={'\0'};
    char stringtoread[DIM_WORDS]={'\0'};
    char line[DIM_WORDS]={'\0'};
    char* verify;
    FILE* fp=NULL;
    int ret=0 , num=0;

    do{
        printf("Introduza o nome do ficheiro e a palavra a procurar\n");
        fgets(stringtoread, DIM_WORDS, stdin);
        ret=sscanf(stringtoread, "%s %s", textname, word);
    }while(ret!=2);


    fp=fopen(textname, "r");

    if(fp==NULL)
    {
        printf("Error: That file doesn't exist or could not be open\n");
        exit(EXIT_FAILURE);
    }

    while(fgets(line, sizeof(line), fp))
    {

        verify = strstr(word, line);

        if(verify!=NULL)
        {
            printf("The word was encountered in line %d\n", num);
            printf("%s", line);
        }

        num++;

    }


    fclose(fp);

    return EXIT_SUCCESS;

}

我用文件text.txt尝试了我的程序并试图找到word文件:

文本文件(有时拼写为“textfile”:旧的替代名称是“flatfile”)是一种计算机文件,其结构为一系列电子文本行。

计算机文件系统中存在文本文件。

文本文件的结尾通常通过在文本文件的最后一行之后放置一个或多个特殊字符(称为文件结束标记)来表示。

这些标记在CP / M和MS-DOS操作系统下是必需的。

在Windows和类Unix系统等现代操作系统上,文本文件不包含任何特殊的EOF字符。

“文本文件”指的是一种容器,而纯文本指的是一种内容。文本文件可以包含纯文本,但不限于此。

在一般的描述级别,有两种计算机文件:文本文件和二进制文件。[1]

问题是我的程序没有打印任何东西。 我认为问题可能在这里:

    while(fgets(line, sizeof(line), fp))
    {

        verify = strstr(word, line);

        if(verify!=NULL)
        {
            printf("The word was encountered in line %d\n", num);
            printf("%s", line);
        }

        num++;

    }

因为如果删除大部分代码只是为了打印文件的所有行,就会打印出来:

    while(fgets(line, sizeof(line), fp)
        printf("%s", line);

有人可以帮我解决这个问题吗?谢谢!

1 个答案:

答案 0 :(得分:3)

你已经落后了

verify = strstr(word, line);

当你应该

时,你正在搜索单词
verify = strstr(line, word);