3

ユーザーが単語を入力できるようにするプログラムを作成しようとしています。その後、プログラムは入力された単語をファイルで検索します。ただし、私のプログラムで何が起こるかは、単語を入力しても、入力しているchar配列の0から開始されないことだと思います

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



int main(int argc, char const *argv[])
{
int num =0;
char word[2000];
char *string;

FILE *in_file = fopen("words.txt", "r");
//FILE *out_file = fopen("output.txt", "w");

if (in_file == NULL)
{
    printf("Error file missing\n");
    exit(-1);
}

while(word[0]!= '0')
{
    printf("please enter a word(enter 0 to end)\n");
    scanf("%s",word);

    while(!feof(in_file))
    {
        fscanf(in_file,"%s",string);
        if(!strcmp(string,word))//if match found
        num++;
    }
    printf("we found the word %s in the file %d times\n",word,num );
    num = 0;
}

return 0;
 } 

誰かが私を助けて、正しい位置に読み直すことができますか? それで、単語を比較するとき、それは正しく行われますか?

4

1 に答える 1

2

のメモリを宣言するのを忘れましたchar *string;fscanf(in_file,"%s",string);プログラムが予約されていないメモリに書き込もうとすると、未定義の動作が発生し、クラッシュする可能性が非常に高くなります。

char *string;と置き換えますchar string[ MAX_WORD_LENGTH ]

他にも多くの問題があります。たとえば、毎回ファイルを読み取っているため、最初の試行でしか検索が機能せず、EOF に達するとそれ以上読み取れなくなる場合があります。検索のたびにfseekを使用して位置インジケータをファイルの先頭に設定する必要があります。

fseek ( in_file, 0, SEEK_SET );

また、strcmpの代わりにstrstrを使用すると、より良い結果が得られる場合があります。

于 2013-03-19T21:46:44.523 に答える