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