2

私のプログラムを機能させるために何度も試みた後、私は皆さんに頼ります。特定の単語が入力された回数をカウントするプログラムを作りたいです。その特定の単語が引数として指定されており、argc と argv を使用してそれを呼び出そうとしています。次に、単語を入力した回数をプログラムにカウントさせ、最後に #EOF を入力できるようにして、停止して結果を表示するようにします。これは私がこれまで試してきたことです。

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

int main(int argc, char *argv[])
{

int i=0;
char buf[1026]={'\0'};
char *p="#EOF\n";
fgets(buf, sizeof buf, stdin);

while((strcmp(buf, p) !=0) && (fgets(buf, sizeof buf, stdin) != NULL ))
{

   if(strncmp(buf, argv[1], strlen(argv[1])) == 0)
    {
        i++;
    }
}
printf("%d", i);

return 0;
}

エラーはまったく発生しませんが、実際には何も起こりません。私は障害がどこにあるかを確認しようとしましたが、if ステートメント内で I の値を表示しようとすると、非常に高速にカウントされていることがわかりました!

前もって感謝します!

4

3 に答える 3

1

最初の問題は、argv[0] がプログラムの名前であることです。パラメータは argv[1] から始まります。

また、buf に何かを入れる前に while ループが呼び出されています。ループが適切に動作するようにするには、別のループを使用するか、事前に buf を初期化する必要があります。

また、一致する必要があるものと一致しないものを正確に把握することをお勧めします。検索する単語の長さに基づいて部分文字列比較 (strncmp) を行っていますが、これでよろしいですか? これは部分文字列の単語を取得しますが、それが必要ですか、それとも単語全体が必要ですか? また、ユーザーは各行に単語を入力するだけですか、それとも単語が出現する可能性のある文を入力しますか? 大文字小文字は重要ですか?

于 2012-12-11T15:21:42.330 に答える