下のプログラムの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を超えるときのようなんですが・・・
お願いいたします。
No.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 にも注意。
・以上。
No.3ベストアンサー
- 回答日時:
#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;
}
No.2
- 回答日時:
ちなみに標準関数を使ってはいけないのでしょうか? 標準関数を使えるなら、fopen()、fgets()、strlen()、strcpy()、fclose() 辺りを使えば簡単に書くことができますが。
標準関数を使ってはいけないのであれば、それでもとりあえず標準関数を使ってプログラムを書き、動作確認をしてから標準関数に相当する関数を、自前で実装するのが手堅いです。それぞれの関数の詳細は、man コマンドでマニュアルを引くか、使えなければ参考URLで検索してみてください。参考URL:http://www.linux.or.jp/JM/
No.1
- 回答日時:
> 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);
}
すみません!これです><
切羽詰っていたもので。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のfor文です。 繰り返しの...
-
strchr() の第2引数はなぜ int ...
-
CStringをwchar_tに変換したい
-
_TCHAR*での引数の読み込み
-
間接操作のレベルとは
-
fgetsなどのときのstdinのバッ...
-
c++ 文字列を入力して、一文字...
-
C言語の入力した文字を反転させ...
-
ftoa の作り方
-
標準ライブラリ関数の自作につ...
-
c言語です。
-
ネットワークにつながっている...
-
str系関数を使わずに二つの文字...
-
構造体のアライメント調整
-
間接参照のレベルが異なっています
-
文字列から空白を取り除きたい...
-
起動時の引数の取得方法が分か...
-
コマンドラインに入力されてい...
-
配列をnビットシフトする
-
RGB→YUV変換のプログラム
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
charでの計算?
-
C言語のfor文です。 繰り返しの...
-
charからLPTSTRへの変換方法
-
文字列から空白を取り除きたい...
-
C言語の入力した文字を反転させ...
-
'const char *' 型は 'char *' ...
-
配列をnビットシフトする
-
str系関数を使わずに二つの文字...
-
int main()の・・・
-
atoi( ) の反対をやりたい
-
CStringをwchar_tに変換したい
-
c++ 文字列を入力して、一文字...
-
switch文で文字を比較すること...
-
干支のプログラム
-
3桁区切(コンマ)記号をつけ...
-
絶対パスからのファイル名の切...
-
間接操作のレベルとは
-
間接参照のレベルが異なっています
-
型変換
おすすめ情報