BUF_SIZE文字以上ある行を読み込もうとした場合に、 BUF_SIZE文字目以上を表示せずに、 再び次の行頭から画面表示するようにする。
例えば、BUF_SIZEを5に設定して、 次のファイルのように、以下のようなテキストファイル
88888888
333
7777777
1
4444
9999999
666666
55555
22
を入力したとき次のように表示することになる。
8888
333
7777
1
4444
9999
6666
5555
22
以下のようにコードを書いたのですが、うまくいきません。どのようにすればいいのでしょうか。ご教授ください。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define BUF_SIZE 5
int main(void){
FILE *fp;
const char *filename="for_report4-2.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;
}
No.2
- 回答日時:
表示する文字は4文字になっていますね。
(8888 等)この場合、bufの大きさは、4文字+改行コード+終端NULLが必要になるため、6バイト必要です。
従って、まず
1案 BUF_SIZE を 5から6に変更する。
(#define BUF_SIZE 6 と定義する。)
2案 char buf[BUF_SIZE] を char buf[BUF_SIZE+1]にし
fgets(buf, BUF_SIZE, fp) を fgets(buf, BUF_SIZE+1, fp)
にする。
のどちらかにしないとだめです。
どちらにしますか?
fgetsはかならず、読み込んだ文字の最後に終端NULL文字(\0)を付加します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c言語でのfscanfについて
-
txtファイルの文字を配列に格納
-
【C言語】ファイルを読み込んで...
-
エラーがわかりません、、
-
C言語 連番データの読み込み
-
fgets( ) の返り値は何?
-
ファイルへの書込み処理が異常...
-
fgets関数の利用 c言語
-
C言語でファイル名を変数にした...
-
c言語 DFAのプログラム
-
数値のみ抽出(C言語)
-
ファイルの特定行の抽出
-
Cで文字列の分割
-
マイナスからプラスへ転じた時...
-
Enterキーを押されたら次の処理...
-
「指定されたキャストは有効で...
-
数字以外が入力されたらエラー...
-
C言語で簡単なパックマンゲーム...
-
比較回数と交換回数表示について
-
C言語での引数の省略方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語でのfscanfについて
-
C言語でファイル読み書きを早く...
-
fopenでファイル名に、変数を使...
-
複数ファイルの同時読み込みの...
-
fgets( ) の返り値は何?
-
テキストファイル内に対して, ...
-
ファイルへの書込み処理が異常...
-
C言語にてXMLファイルから任意...
-
ファイル出力で改行を入れたい!
-
C言語でセグメンテーションエ...
-
エラーがわかりません、、
-
ガンマ変換 C言語でプログラ...
-
自己相関関数を求めるプログラ...
-
VisualStudioでのファイルの入...
-
同時にファイル読み込み 書き込み
-
c言語 ファイルから数字を読み...
-
大量の入力ファイルを扱うとき...
-
ファイルが読み込めない・・・
-
【C言語】ファイルを読み込んで...
-
a*(1-exp(-bx))+cの近似の方法
おすすめ情報