ショッピングモール  Personal Health / Men's Health ( Infertility )


掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板1

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.4879

はじめまして、こんばんわ。
投稿者---hide(2005/11/21 22:21:31)


C初めてまだ間もない初心者です。
文字列検索プログラムを作っていて一つ困った事があったので
お聞きします。
fgetsを使ってファイルから読み込み、strstr関数を使って検索してます。
一行の最大値を超える場合の動作として無視したいのですが、改行して
出力されています、処理としてどの様にしたらいいのかご教授いただけらと思います。
説明が下手で申し訳ないですがよろしくお願いします。

OS:WindowsXP

コンパイラ:Borland C++ 5.5



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:はじめまして、こんばんわ。 4881 Blue 2005/11/21 22:56:00
<子記事> Re:はじめまして、こんばんわ。 4883 RiSK 2005/11/21 22:58:14


No.4881

Re:はじめまして、こんばんわ。
投稿者---Blue(2005/11/21 22:56:00)


> 一行の最大値を超える場合の動作として無視したいのですが
の意味がイマイチわからないのですが、

char input[ 20 ];
fgets( input, sizeof( input ), stdin );

みたいなのに、20文字以上入力された時に、20文字以降の文字と中途半端に読み込まれている文字列を
無視するということでしょうか?



この投稿にコメントする

削除パスワード

No.4885

Re:はじめまして、こんばんわ。
投稿者---hide(2005/11/21 23:16:06)


Riskさんご指摘どうもありがとうございます。
至らない所が多々あるかもしれないですが、真摯に受け止め
気をつけるようにいたします。
どうもすいませんでした。
下記がソースになります、よろしくお願いします。

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

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

{

FILE *fp;
char line[128];
int lineNo = 0;

if(argc != 3) {

return 1;

}

fp = fopen(argv[1] , "r");

if(fp == NULL) {

printf("開けません");

return 1;

}

while(fgets(line , 128 , fp) != NULL) {

lineNo++;

strstr(argv[2] , line);

printf("[%d] %s" , lineNo ,line);

}

return 0;

}



この投稿にコメントする

削除パスワード

No.4887

Re:はじめまして、こんばんわ。
投稿者---RAPT(2005/11/21 23:41:20)


ソースコード変換ツールを使って下さい。

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

int main(int argc, char *argv[])
{
    FILE *fp;
    char line[128];
    int lineNo = 0;
    if(argc != 3) {
        return 1;
    }

    fp = fopen(argv[1] , "r");
    if(fp == NULL) {
        printf("開けません");
        return 1;
    }

    while(fgets(line , 128 , fp) != NULL) {
        lineNo++;
        strstr(argv[2] , line);
        printf("[%d] %s" , lineNo ,line);
    }
    return 0;
}



この投稿にコメントする

削除パスワード

No.4888

Re:はじめまして、こんばんわ。
投稿者---RAPT(2005/11/21 23:46:49)


# あ、HTML変換ツールだった。。

で、
> 一行の最大値を超える場合の動作として無視したいのですが
の意味が分かりかねます。

それから、strstr()の使い方を間違えていると思います。
# 引数の指定内容が逆だと思います。リファレンスを調べてみてください。

fgets()の仕様もリファレンスで調べてみれば分かりますが、
ファイルを1行読み込んだとき、指定文字数(ここでは128バイト)
未満の場合、最後の改行文字も読み込みます。
128バイト以上の場合、途中でぶったぎられます。

そのため、読み込んだ文字列の最後の文字が改行文字かどうかを
判別し、対処する必要があります。



この投稿にコメントする

削除パスワード

No.4890

Re:はじめまして、こんばんわ。
投稿者---hide(2005/11/21 23:57:39)


どうもご指摘どうもありがとうございます。
関数の仕様を調べてみて上手いこと動作するように頑張ってみます、
こんな遅くまでありがとうございます。



この投稿にコメントする

削除パスワード

No.4883

Re:はじめまして、こんばんわ。
投稿者---RiSK(2005/11/21 22:58:14)


>題名と投稿者名は具体的に書きます。

題名がふさわしくありません。
しかも,「こんばんは」が正しいです。

>一行の最大値を超える場合の動作として無視したいのですが、改行して
>出力されています、処理としてどの様にしたらいいのかご教授いただけらと思います。

改行しないプログラムにすると良いです。
なぜ,改行するのか分かりますか?
まずは,原因を調べましょう。

また,あなたのコードを提示するとよりよいアドバイスがもらえるかもしれません。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧




掲示板提供:Real Integrity