掲示板利用宣言

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

 私は

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

掲示板2

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

No.26674

逆さまに表示するには?
投稿者---file(2006/04/21 16:35:15)


プログラムファイルを読み込み最後の行から最初の行へと逆さまに表示するにはどうしたらよいですか?

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

int main()
{
FILE *fp;
char *buf[300];
char filename[80], p[256];
int count = 0;
int i;

printf("input filename:");
gets(filename);

fp = fopen(filename, "r");

while(!feof(fp)){
fgets(p,256,fp);
buf[300]=malloc(sizeof(char)*strlen(p));
strcpy(buf[count], p);
count++;
}

for(i=0; i<=count; i++){
printf("%s",buf[count-i]);
}
return 0;
}

が今のところまでのものです。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:逆さまに表示するには? 26676 Blue 2006/04/21 16:39:03
<子記事> Re:逆さまに表示するには? 26719 かずま 2006/04/30 23:26:45


No.26676

Re:逆さまに表示するには?
投稿者---Blue(2006/04/21 16:39:03)


>    for(i=0; i<=count; i++){
>    printf("%s",buf[count-i]);
>    }
このコードの意味はわかりますか?
1行目から count行目まで順に表示 というコードですよ。
逆にするならば、、、わかりますよね?


この投稿にコメントする

削除パスワード

No.26678

Re:逆さまに表示するには?
投稿者---Blue(2006/04/21 16:52:03)


あと
> buf[300]=malloc(sizeof(char)*strlen(p));
これメチャクチャですよね?
  • buf[300]をつかってはダメ(つかえるのは0〜299)
  • mallocすべきはbuf[count]
  • 文字列を格納する領域は '\0' の分まで考慮すべき。 よって sizeof(char)*(strlen(p)+1));



この投稿にコメントする

削除パスワード

No.26680

Re:逆さまに表示するには?
投稿者---REE(2006/04/21 17:05:56)


> for(i=0; i<=count; i++){
> printf("%s",buf[count-i]);
> }

> このコードの意味はわかりますか?
>1行目から count行目まで順に表示 というコードですよ。
>逆にするならば、、、わかりますよね?

Blueさんの読み違えでしょうか?
私には逆順に表示するように見えます。

それはさておき、以下が守られていません。
>環境(OSとコンパイラ)や症状は具体的に詳しく書きます。



この投稿にコメントする

削除パスワード

No.26681

Re:逆さまに表示するには?
投稿者---Blue(2006/04/21 17:10:32)


>Blueさんの読み違えでしょうか?
>私には逆順に表示するように見えます。
あwすいません、ほんとうですね。。。orz

ということは問題はNo.26678のほうですかね。
でも、
i = 0のときは buf[count]なのでやばいですね。(格納していないデータ)


この投稿にコメントする

削除パスワード

No.26719

Re:逆さまに表示するには?
投稿者---かずま(2006/04/30 23:26:45)


> プログラムファイルを読み込み最後の行から最初の行へと逆さまに
> 表示するにはどうしたらよいですか?

元のプログラムは字下げされていないので読む気がしません。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void rev(FILE *fp)
{
    static char buf[1024];  char *p;

    if (fgets(buf, sizeof buf, fp) && (p = strdup(buf)))
        rev(fp), fputs(p, stdout), free(p);
}

int main(void)
{
    rev(stdin);
    return 0;
}



この投稿にコメントする

削除パスワード

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