現在C言語の勉強をしているのですが、ファイル入力のfscanfの使い方がいまいちわかりません。
テキストファイル「TEST4K01.txt」には
「A01MATSUMOTO 090075100」が入ってるのですが、それぞれ構造体に直接振り分けて格納したい為fscan関数を使って下のソースを書いたのですがコンパイルするといつも以上終了してしまいます。大変申し訳ないのですが、誰か助言を御願いします。
#include<stdio.h>
#include<stdlib.h>
struct score
{
char clas_i;
char num_i;
char name[10];
int eigo_i;
int sugaku_i;
int kokugo_i;
};
FILE *ifp;
int main(void)
{
struct score dt;
if((ifp = fopen("TEST4K01.txt", "r")) == NULL){
printf("ファイルエラー\n");
exit(1);
}
fscanf(ifp, "%1c%2d%10c%3d%3d%3d\n", &dt.clas_i, &dt.num_i, &dt.name, &dt.eigo_i, &dt.sugaku_i, &dt.kokugo_i);
printf("%s", dt.clas_i);
printf("%d", dt.num_i);
printf("%s", dt.name);
printf("%d", dt.eigo_i);
printf("%d", dt.sugaku_i);
printf("%d", dt.kokugo_i);
fclose(ifp);
return 0;
}
No.3ベストアンサー
- 回答日時:
※スペースはつぶされるので全角2スペース2つでインデントしています。
Windows2000sp4/VC++6sp6/Console-Appでコンパイル
dt.num_iの型をint型にしました。
fscanf()で、書式を変更しました。
fscanf()で、&dt.name を dt.name にしました。
printf()で、書式を変更しました。
#include <stdio.h>
#include <stdlib.h>
struct score
{
char clas_i;
int num_i;
char name[10];
int eigo_i;
int sugaku_i;
int kokugo_i;
};
int main(void)
{
struct score dt = {0};
FILE *ifp = NULL;
if((ifp = fopen("TEST4K01.txt", "r")) == NULL){
printf("ファイルエラー\n");
exit(1);
}
fscanf(ifp, "%c%2d%10s%3d%3d%3d\n", &dt.clas_i, &dt.num_i, dt.name, &dt.eigo_i, &dt.sugaku_i, &dt.kokugo_i);
fclose(ifp);
printf("%c", dt.clas_i);
printf("%02d", dt.num_i);
printf("%s", dt.name);
printf("%03d", dt.eigo_i);
printf("%03d", dt.sugaku_i);
printf("%03d", dt.kokugo_i);
return 0;
}
-----実行例----------
A01MATSUMOTO090075100
---------------------
遅くなり本当に申し訳ございませんでした。わざわざのご回答ありがとうございました☆これからもっともっとC言語を勉強し一流のSEになれるようがんばります♪
No.2
- 回答日時:
「コンパイルすると異常終了する」とのことですが、まず、どんなエラーメッセージが出ているのかを書いて下さい。
それから、ソースをちょっと見たところでは、
> printf("%s", dt.clas_i);
が、間違ってますね。
%s は、%c でなければなりません。
%s は、「NUL で終わる文字列」を表すものなので、1バイトしかなく、従って NUL で終わっていない dt.clas_i を %s で表示しようとすると、おかしなことになります。
手元の環境で上記のように直したら、一応実行できましたが…
ありがとうございます☆
ご指摘されてから気づきました。
なにぶん独学で勉強している為まだまだ未熟者で
ちょっとしたミスにも気づかないのが現状です。。。
しかし、これからもめげずにがんばっていきたいと思います☆
わざわざお答えいただきありがとうございました♪
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Enterキーを押されたら次の処理...
-
printf による16進表示について
-
空白を含んだ文字列がうまく格...
-
C言語のプログラムで、途中で止...
-
C言語についてです。
-
プログラミングの授業の課題です
-
#defineが使用するメモリ領域に...
-
受信データから必要な部分のみ...
-
Cでファイルの行数をカウントす...
-
矢印キーを押下してコンソール...
-
2進数の表示
-
C言語でのCSVファイルの読み出...
-
プログラムC
-
char型2つを結合し、short型に...
-
バイナリファイル(画像)のよみ...
-
【C言語】文字列による処理の分...
-
C言語で複数列のデータを1列の...
-
エラーについて質問です。
-
ビルドエラーの対処がわからな...
-
「an=(n-1)/(n+1)のときlim[n→∞...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Enterキーを押されたら次の処理...
-
printf による16進表示について
-
#defineが使用するメモリ領域に...
-
空白を含んだ文字列がうまく格...
-
char型2つを結合し、short型に...
-
【C言語】全角文字の配列を、全...
-
プログラミングの授業の課題です
-
C言語のプログラムで、途中で止...
-
C++で指定文字列のカウント方法...
-
C言語で複数列のデータを1列の...
-
C言語でのCSVファイルの読み出...
-
構造体メンバの初期化
-
なぜ無限ループになるかが分か...
-
reallocでエラー
-
Ç言語でファイルサイズを変更す...
-
ファイル操作で全角空白を消す
-
矢印キーを押下してコンソール...
-
セグメンテーションエラーの原...
-
static付き宣言の初期化
-
ファイルから数字列を16進数の...
おすすめ情報