きのう作成したstudent.txtの中身をターミナル上に出力する
auです。
きのう、student.txtの中身に出力するプログラムを作成しました。
program-shoshinsya.hatenablog.com
今回はその中身を出力したいとおもいます。
student.txtの中身
cat student.txt id: 1 name: au id: 2 name: Sato
fscanfという関数を利用して中身を受け取り、printfでターミナル上に出力します。
プログラム
#include <stdio.h> #include <string.h> int main(void) { FILE *fp; char f_name[] = "student.txt"; char str1[16]; char str2[16]; char name[16]; int id = 0; fp = fopen(f_name, "r"); if (fp == NULL) { printf("%sを開くことができませんでした\n", f_name); return -1; } while (fscanf(fp, "%s, %d, %s, %s", str1, &id, str2, name) != EOF) { printf("%s%d%s%s\n", str1, id, str2, name); } fclose(fp); return 0; } // 実行結果 id:0@ 10@ name:0@ au0@ id:0@ 20@ name:0@ Sato0@
何か思ってたのと違う・・・
空白が改行で読み込まれ、文末それぞれに"0@"とついてしまっています。
str1の範囲を256にし、str1だけを出力すると改行以外うまくいきました。
#include <stdio.h> #include <string.h> int main(void) { FILE *fp; char f_name[] = "student.txt"; char str1[256]; fp = fopen(f_name, "r"); if (fp == NULL) { printf("%sを開くことができませんでした\n", f_name); return -1; } while (fscanf(fp, "%s", str1) != EOF) { printf("%s\n", str1); } fclose(fp); return 0; } // 実行結果 id: 1 name: au id: 2 name: Sato
文末の0@以外は出力できたのですが、これだとidも文字列として認識されてしまうため、うまくいったかというと、あまりうまくいってないのかなと思います。
また後日修正してみたいと思います。