LoginSignup
0
2

More than 3 years have passed since last update.

C言語 構造体とポインタ 実践を意識rev3

Last updated at Posted at 2019-10-10

前記事で頂いた指摘をもとに改良。
次は入力時の例外処理なんかを調べようかな。。

userinfo.c
#include <stdio.h>      //システムインクルードは < >を使う。自作ヘッダインクルードは""を使う。
#include <stdint.h>     //厳密には探しにいく順番が違ったりするらしいが、、
                        //何よりも読み手を混乱させるのがよくないのでちゃんと覚えておこう。
#define NAME_SIZE       ( 100 )   
#define AGE_SIZE        (  10 )   
#define ADDRESS_SIZE    ( 100 )   
#define SEX_SIZE        (  10 )   
#define PHONE_SIZE      (  20 )   

typedef struct user_info {          
    uint8_t  name[NAME_SIZE];
    uint8_t  age[AGE_SIZE];         
    uint8_t  address[ADDRESS_SIZE];
    uint8_t  sex[SEX_SIZE];         
    uint8_t  phoneNumber[PHONE_SIZE];
}UserInfo;

void UserInfo_input(UserInfo* user) {   //voidの書き忘れに注意。コンパイラによってはエラーでるものも?
    printf("名前を入力してください->");
    scanf_s("%s", user->name,sizeof(user->name));//本来は汎用的なscanfを使うところだがVC++の仕様?で仕方なく
                                                 //VC++でscanf使うとエラーに、、これは酷い気が。。
    printf("\n年齢を入力してください->");
    scanf_s("%s", user->age, sizeof(user->age));

    printf("\n住所を入力してください->");
    scanf_s("%s", user->address, sizeof(user->address));

    printf("\n性別を入力してください->");
    scanf_s("%s", user->sex, sizeof(user->sex));

    printf("\n電話番号を入力してください->");
    scanf_s("%s", user->phoneNumber, sizeof(user->phoneNumber));

}

void UserInfo_save(const UserInfo* user) { //ここではuserが指す領域は変更しない。
//こういうときはconstつけるべき。さもなくばCPUが非効率な処理?をしてしまうみたい。
    FILE* fp;

    if (fopen_s(&fp, "TBD.txt", "w")!= 0) { //ファイル名はuser.nameなどから持ってきたい!できない!眠い!
        printf("ファイルアクセス失敗!");
    }
    fprintf_s(fp, "【名前】\n%s\n", user->name);
    fprintf_s(fp, "【年齢】\n%s\n", user->age);
    fprintf_s(fp, "【住所】\n%s\n", user->address);
    fprintf_s(fp, "【性別】\n%s\n", user->sex);
    fprintf_s(fp, "【電話番号】\n%s\n", user->phoneNumber);
    fclose(fp);
}

int main(void) {

    UserInfo    user;
    UserInfo_input(&user);
    UserInfo_save(&user);

    return 0;
}
0
2
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2