プロが教えるわが家の防犯対策術!

下のプログラムのmainの***************部とgetl()をどのように書いたらいいかわかりません。
出来ればプログラミングで書いていただけると嬉しいです。


#include <stdio.h>
#define MAXLINE 1000

int getl(char s[] , int lim)
{

}
void copy(char to[], char from[] )
{
int i;

i= 0;
while((to[i] = from[i]) ! = ‘\0’)
++i;
}
int main()
{
int len;
int max;
char line[MAXLINE];
char longest[MAXLINE];

max = 0;

本で調べたところ、ループが終わる条件はEOFか、\nが出たときと、limitを超えるときのようなんですが・・・
お願いいたします。

A 回答 (4件)

★main() 関数一本で作ってみました。


・これを元に穴埋めの『getl』や『copy』関数を完成させて下さい。
 『copy』関数は最後に NULL 文字を追加しないとまずい気がしますけど。いいの?
 『getl』関数は自分で fgets() 関数と同じものを作ればよいだけです。
・テストするときは標準関数の fgets() と同じ結果になるか調べましょう。
 『getl』関数には第3引数はありませんが第1引数、第2引数は同じです。

サンプル:
int main( void )
{
 char save[ 256 ];
 char buff[ 256 ];
 int max = -1;
 int len;
 
 // コンソールから入力
 while ( fgets(buff,sizeof(buff),stdin) != NULL ){
  len = strlen( buff );
  
  if ( len > max ){
   max = len;
   strcpy( save, buff );
  }
 }
 // 結果表示
 printf( "%d: %s", max, save );
 return 0;
}

その他:
・『getl』関数は内部で getchar() とか、getc()、fgetc()、getch()、getche() などで
 1文字を第1引数『char s[]』に入れていけばよい。だたし第2引数の『int lim』を
 越えない文字数を入れます。また文字列の最後の NULL 文字分を引いた文字数をセット
 するようにも心がけましょう。あと EOF や \n にも注意。
・以上。
    • good
    • 0

 


#include <stdio.h>

#define MAXLINE 1000

int getl(char s[] , int lim)
{
int i;

if(!fgets(s, lim, stdin)){
s[0] = '\0';
return -1;
}
for(i = 0; s[i] != '\n' && s[i] != '\0'; i ++) ;
s[i] = '\0';
return i;
}

void copy(const char from[], char to[] )
{
do{*to ++ = *from;}while(*from ++ != '\0');
}

int main(void)
{
int len;
int max;
char line[MAXLINE];
char longest[MAXLINE];

for(max = 0; (len = getl(line, MAXLINE)) != -1; ){
if(len > max){
max = len;
copy(line, longest);
}
}
printf("%d %s\n", max, longest);
return 0;
}
 
    • good
    • 1

ちなみに標準関数を使ってはいけないのでしょうか? 標準関数を使えるなら、fopen()、fgets()、strlen()、strcpy()、fclose() 辺りを使えば簡単に書くことができますが。

標準関数を使ってはいけないのであれば、それでもとりあえず標準関数を使ってプログラムを書き、動作確認をしてから標準関数に相当する関数を、自前で実装するのが手堅いです。それぞれの関数の詳細は、man コマンドでマニュアルを引くか、使えなければ参考URLで検索してみてください。

参考URL:http://www.linux.or.jp/JM/
    • good
    • 0

> mainの***************部



質問文のどこにあります?
あとこの質問、Yahoo!知恵袋にもポストしてますね。

この回答への補足

#include <stdio.h>
#define MAXLINE 1000

int getl(char s[] , int lim)
{

}
void copy(char to[], char from[] )
{
int i;

i= 0;
while((to[i] = from[i]) ! = ‘\0’)
++i;
}
int main()
{
int len;
int max;
char line[MAXLINE];
char longest[MAXLINE];

max = 0;
while((len = getl(line , MAXLINE)) > 0)
if (len > max) {

***************************

}
if (max > 0)
printf(“%d: %s” , max, longest);
return (0);
}

すみません!これです><
切羽詰っていたもので。。。

補足日時:2007/08/02 16:22
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!