【掲示板ご利用上の注意】

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

 詳しくはこちら


本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール掲示板2こちら


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

No.23312

お願いです!! 助けてください。
投稿者---zenetomo(2005/09/26 17:07:21)


現在、双方向リストを用いたStrinput関数を勉強しているのですが、もうあまりにも複雑すぎて分からなくなってしまいました。。。
どうかお願いです。誰か助けてください。
以下のソースは分からないなりにも自分で精一杯がんばってみました。
以下のソースで誤りがあればどこがどう違うのか教えていただけると助かります。
よろしくお願いします。
#include <conio.h>
#include <stdio.h>
#include <ctype.h>

#define BUF_LEN (80)
struct InputData {
char Data;
struct InputData *BackPtr;
struct InputData *NextPtr;
}InputData={0,0,0};
struct InputBuffer {
struct InputData *StartPtr;
struct InputData *EndPtr;
struct InputData Buffer[BUF_LEN];
}*StartPtr={0},*EndPtr={0};
char *StrInput(char *DefaultStr, int InputLen);
int main()
{
char *buf;
buf = StrInput("",BUF_LEN);
printf("\n");
printf("%s", buf);
return 0;
}
char *StrInput(char *DefaultStr, int InputLen)
{
static char buffer[BUF_LEN+1];
struct InputBuffer input;
int a=0;
int b=0;

for(a=0; a<=BUF_LEN; a++){
InputData.Data=getch();
if(input.Buffer[a].Data==0x00){
input.Buffer[a].Data=InputData.Data;
struct InputData *NextPtr;
}
if(InputData.Data==0x0d){
break;
}
}
for(input.Buffer[0].NextPtr=input.StartPtr;;){
for(b=0; b<=BUF_LEN+1; b++){
for(a=0; a<=BUF_LEN; a++){
buffer[b]=input.Buffer[a].Data;
if(input.Buffer->NextPtr==0x00){
break;
if(b==BUF_LEN+1){ break;
     }
}
}
}
}
putchar(buffer[b]);
return &buffer[0];
}



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:お願いです!! 助けてください。 23313 まきじ 2005/09/26 17:13:08
<子記事> Re:お願いです!! 助けてください。 23314 Blue 2005/09/26 17:13:52
<子記事> Re:お願いです!! 助けてください。 23315 あかま 2005/09/26 17:14:38
<子記事> Re:お願いです!! 助けてください。 23316 nop 2005/09/26 17:19:34
<子記事> StrInput 23324 RiSK 2005/09/27 01:21:37


No.23313

Re:お願いです!! 助けてください。
投稿者---まきじ(2005/09/26 17:13:08)


>return &buffer[0];

buffer は strInput() 内でしか使用できません。
strInput() を抜けるとメモリ上のどこにあるか判らなくなります。


この投稿にコメントする

削除パスワード

No.23320

Re:お願いです!! 助けてください。
投稿者---かずま(2005/09/26 19:10:19)


> buffer は strInput() 内でしか使用できません。
> strInput() を抜けるとメモリ上のどこにあるか判らなくなります。

確かに、buffer という名前は、関数 StrInput 内でしか使用できませんが、
buffer が参照しているオブジェクトは、StrInput を抜けた後も、メモリ上に
存在し、main の buf で参照できます。static の意味を考えてみてください。


この投稿にコメントする

削除パスワード

No.23323

Re:お願いです!! 助けてください。
投稿者---まきじ(2005/09/26 23:17:40)


>メモリ上に存在し、main の buf で参照できます。static の意味を考えてみてください。

その通りです。
static を見逃してました・・


この投稿にコメントする

削除パスワード

No.23314

Re:お願いです!! 助けてください。
投稿者---Blue(2005/09/26 17:13:52)


字下げされていないコードを読む気になれない。。。

もう一度【掲示板ご利用上の注意】をよまれて、
何か不足していることがないか、自分の書き込みは適切か確認し、
再度投稿してください。
# 違反項目が、3つほどあります。



この投稿にコメントする

削除パスワード

No.23315

Re:お願いです!! 助けてください。
投稿者---あかま(2005/09/26 17:14:38)


Strinput関数ってなんですか?
やりたいことをきちんと説明してください。

それから、ソースを「HTML変換ツール」を使って貼りなおしてください。


この投稿にコメントする

削除パスワード

No.23316

Re:お願いです!! 助けてください。
投稿者---nop(2005/09/26 17:19:34)


まず、『掲示板ご利用上の注意』をよく読んで下さい。

>分からなくなってしまいました。。。

何がわからないのか?を考えるのが先決かと思います。
ただ「わからない」だけでは、誰も何も答える事が出来ません。
それから、どの様な処理を行うべきか?
を日本語で考えてみましたか?
それが出来ていないのであれば、
まず「どの様な処理を行うべきか?」を考えるべきです。



この投稿にコメントする

削除パスワード

No.23324

StrInput
投稿者---RiSK(2005/09/27 01:21:37)


nopさんの質問に答えてください。
何を回答したらいいのか分かりません。
正しい動作が分からないのに,間違いなど指摘出来ません。

ちょっと修正した上でのソース投稿代行:
#include <stdio.h>
#include <conio.h>

#define BUF_LEN (80)

struct InputData {
    char Data;
    struct InputData *BackPtr;
    struct InputData *NextPtr;
}InputData={0,0,0};

struct InputBuffer {
    struct InputData *StartPtr;
    struct InputData *EndPtr;
    struct InputData Buffer[BUF_LEN];
}*StartPtr={0},*EndPtr={0};

char *StrInput(char *DefaultStr, int InputLen)
{
    static char buffer[BUF_LEN+1];
    struct InputBuffer input;
    int a=0;
    int b=0;

    for(a=0; a<=BUF_LEN; a++){
        InputData.Data=getch();
        if(input.Buffer[a].Data==0x00){
            struct InputData *NextPtr;
            input.Buffer[a].Data=InputData.Data;
        }
        if(InputData.Data==0x0d){
            break;
        }
    }
    for(input.Buffer[0].NextPtr=input.StartPtr;;){
        for(b=0; b<=BUF_LEN+1; b++){
            for(a=0; a<=BUF_LEN; a++){
                buffer[b]=input.Buffer[a].Data;
                if(input.Buffer->NextPtr==0x00){
                    break;
                    if(b==BUF_LEN+1){
                        break;
                    } 
                }
            }
        }
    }
    putchar(buffer[b]);
    return &buffer[0];
}

int main(void)
{
    char *buf;
    buf = StrInput("",BUF_LEN);
    printf("\n");
    printf("%s", buf);
    return 0;
}



この投稿にコメントする

削除パスワード

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