構造体を使ったプログラム例

今日はテスト前で、構造体の全体的な説明も終わり、演習の時間。 以下のようなオブジェクト指向の考え方を取り入れた、 構造体ポインタ渡しのスタンダードなプログラムを示す。

#include <stdio.h>

#define SIZE 10

struct Person {
    char  name[ 20 ] ;
    int   age ;
} ;

int read_Person( struct Person* p ) {
    return scanf( "%s%d" , p->name , &(p->age) ) == 2 ;
}

void print_Person( struct Person* p ) {
    printf( "%s %d\n" , p->name , p->age ) ;
}

int main() {
    int i , size ;
    struct Person table[ SIZE ] ;
	
    // データの入力処理
    for( i = 0 ; i < SIZE ; i++ ) {
        if ( !read_Person( &( table[i] ) ) )
            break ;
        }
    size = i ;
	
    // データの出力処理
    for( i = 0 ; i < size ; i++ )
        print_Person( &( table[i] ) ) ;
    return 0 ;
}

ファイル入出力にも慣れてもらおう

#include <stdio.h>

#define SIZE 10

struct Person {
    char name[ 20 ] ;
    int  age ;
} ;

int read_Person( struct Person* p , FILE* fp ) {
    return fscanf( fp , "%s%d" , p->name , &( p->age ) ) == 2 ;
}

void print_Person( struct Person* p , FILE* fp ) {
    fprintf( "%s %d\n" , p->name , p->age ) ;
}

int main() {
    int    i , size ;
    struct Person table[ SIZE ] ;
    FILE*  fp_in ;
    if ( (fp_in = fopen( "data.txt" , "rt" )) != NULL ) {
        for( i = 0 ; i < SIZE ; i++ )
            if ( ! read_Person( &( table[i] ) , fp_in ) ) {
                size = i ;
                break ;
            }
        for( i = 0 ; i < size ; i++ )
            print_Person( &( table[i] ) , stdout ) ;
    }
    return 0 ;
}

オブジェクト指向っぽく

#include <stdio.h>

#define SIZE 10

class Person {
private:
    char  name[ 20 ] ;
    int   age ;
public:
    int read() {
        return scanf( "%s%d" , name , &age ) == 2 ;
    }
    void print() {
        printf( "%s %d\n" , name , age ) ;
    }
} ;

int main() {
    int size ;
    Person table[ SIZE ] ;
    for( int i = 0 ; i < SIZE ; i++ )
        if ( !table[i].read() ) {
            size = i ;
            break ;
        }
    for( int i = 0 ; i < size ; i++ )
        table[i].print() ;
    return 0 ;
}
 

2016年12月

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

アーカイブ

Google

このブログ記事について

このページは、T-Saitohが2016年11月22日 10:00に書いたブログ記事です。

ひとつ前のブログ記事は「倍精度で精度が足りない...」です。

次のブログ記事は「PCNプログラミングサミット」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。