現在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.2
- 回答日時:
「コンパイルすると異常終了する」とのことですが、まず、どんなエラーメッセージが出ているのかを書いて下さい。
それから、ソースをちょっと見たところでは、
> printf("%s", dt.clas_i);
が、間違ってますね。
%s は、%c でなければなりません。
%s は、「NUL で終わる文字列」を表すものなので、1バイトしかなく、従って NUL で終わっていない dt.clas_i を %s で表示しようとすると、おかしなことになります。
手元の環境で上記のように直したら、一応実行できましたが…
ありがとうございます☆
ご指摘されてから気づきました。
なにぶん独学で勉強している為まだまだ未熟者で
ちょっとしたミスにも気づかないのが現状です。。。
しかし、これからもめげずにがんばっていきたいと思います☆
わざわざお答えいただきありがとうございました♪
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になれるようがんばります♪
お探しの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キーを押されたら次の処理...
-
【C言語】全角文字の配列を、全...
-
プログラミングの授業の課題です
-
C言語のプログラムで、途中で止...
-
C言語でファイルから複素数の値...
-
終了条件Ctrl+zについて,結果表...
-
空白を含んだ文字列がうまく格...
-
printf による16進表示について
-
警告 W8075 問題のあるポインタ...
-
VC++でSQLへSELECT文を送ったの...
-
C言語でのCSVファイルの読み出...
-
へんな現象
-
#define _CRT_SECURE_NO_WARNIN...
-
マイナスからプラスへ転じた時...
-
*をユーザーが入力した数字の数...
-
2÷3などの余りについて
-
10個出力で改行したいのですが...
-
C言語での奇数の和
-
複数桁10進数の*桁目だけを抽出...
-
正負を反転させて出力するプロ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Enterキーを押されたら次の処理...
-
C言語で複数列のデータを1列の...
-
#defineが使用するメモリ領域に...
-
printf による16進表示について
-
空白を含んだ文字列がうまく格...
-
C言語のプログラムで、途中で止...
-
プログラミングの授業の課題です
-
char型2つを結合し、short型に...
-
C言語でのCSVファイルの読み出...
-
矢印キーを押下してコンソール...
-
【C言語】全角文字の配列を、全...
-
エラーについて質問です。
-
リストの作成と出力(C言語)
-
バイナリファイル(画像)のよみ...
-
[C]セグメンテーションエラー:...
-
WinInetのInternetOpenUrl関数...
-
c言語で文書を読み込み、単語の...
-
VC++でSQLへSELECT文を送ったの...
-
受信データから必要な部分のみ...
-
reallocでエラー
おすすめ情報