C言語の、fgetsや文字列関数についての質問です。
例えばファイルの中身が
88888888
333
7777777
1
4444
9999999
666666
55555
22
であった時、入力したとき次のように表示するコードを書く。
8888
333
7777
1
4444
9999
6666
5555
22
そのようなコードを書きたい場合、BUF_SIZE文字以上ある行を読み込もうとした場合、 BUF_SIZE文字目以上を表示せずに、 再び次の行頭から画面表示するようにすればいいと思うのですが、そのようなコードはどのように書けばいいのでしょうか。何度も考え、調べてみたのですが、読み込んだ行がBUF_SIZE文字目以上の場合、次の行を読み込むようにする方法がわかりません。すみませんが、ご教授願います。
ご自分の質問を『第三者的視点で』フラットな状態で読んで下さい。
「どのようにやった」とかはっきりとわかりますか?
プログラミングは「こう書けばいい」というものではありません。
決まった形というのがありません。
また、回答者は質問者と同じ環境にある…わけではありません。
よって、「どのようにやったか」さえ回答者にはわかりません。
また質問者さんの力量すらわかりません。
これでは回答のしようがないです。
質問は修正できるので修正してください。
replitで、上のファイルを「const char *filename="saz.txt"」のように指定し、
そのファイルに対し、以下のようなコードを実行しました。しかしうまくいきませんでした。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define BUF_SIZE 5
int main(void){
FILE *fp;
const char *filename="saz.txt";
char buf[BUF_SIZE];
char *ch;
int line=1;
char *check_whole_line;
char *str1;
fp=fopen(filename, "r");
if(fp==NULL){
printf("Can't Open File %s\n", filename);
exit(1);
}
while(1){
ch=fgets(buf, BUF_SIZE, fp);//ファイルを一行ずつ読み込み
if(ch==NULL){
break;
}
check_whole_line=strchr(buf, '\n');//読み込んだ文字列の中に\nがあるかどうか判定
if(check_whole_line==NULL){//読み込んだ文字列の中に\nがなかったら、、、
printf("%s", buf);
while(1){
ch=fgets(buf, BUF_SIZE, fp);
if(strlen(buf)>BUF_SIZE){
strncpy(str1, buf, BUF_SIZE);
printf("%s", str1);
}
if(ch==NULL){
break;
}
}
exit(1);
}
else{
printf("%s", buf);
}
}
fclose(fp);
return 0;
}
そういうのは本文に書きましょう。
質問は修正できるので修正してください。
他のユーザ(回答者も含む)はこの修正依頼とかまでは読まない事が多いです。
(読む人もいるけど、普通は目につく質問本文のみだし)
なので編集してください。
それと『うまくいかない』っていうのは本当にやめてください。
そういうのは『主観によるもの』です。
「テストを受けました。ですがうまくいきませんでした」みたいなものです。
そもそも回答者はそのテストを受けてもいないし、うまくいかないっていうのも主観的なものです。解き方そのものがわからなかったのか、計算ミスしていたのか、意図を取り間違っていたのか、記述する欄をミスったのか、わかりません。
プログラミング以前の問題です。
プログラミングっていうのは『機械とのコミュニケーション』です。人間とのコミュニケーションすら満足に取れない人が「曖昧な要求が認識できないような機械」とコミュニケーションなんて取れないはずです。
まずは『質問本文に』、「自分なりのコード」や「どのようにうまくいかないのか」は書きましょう。
fgetcを使えば悩まなくても良いのに、なぜfgetsを使うのでしょう?