|
丁寧な解説ありがとうございました。。
現在こういった状態なのですが、入力した誕生年・月の出力がうまくいきません。どこがダメなんでしょう!?
また、Cマニア(超初心者)さんに指摘されたstrcmp関数への変更はこんな感じでよかったですか?
/*
SampleSource
#include <stdio.h>
#include <string.h>
#define NAME_MAX 10
#define PEOPLE_MAX 10
#define BUF_SIZE 256
typedef struct TAG_PERSON {
char name[NAME_MAX];
unsigned int birth_year;
unsigned int birth_month;
} PERSON;
void main()
{
PERSON people[PEOPLE_MAX];
int i, j, k, ruikei, check, len[2];
char temp[10];
for( i = 0;i < 10;i++ ){
printf( "%d人目の名前を入力してください\n", i + 1 );
scanf( "%s", &people[i].name );
scanf( "%s", &people[i].birth_year );
scanf( "%s", &people[i].birth_month );
printf("累計件数:%d\n", i + 1 );
/* if( people[i].name == '0' ){
printf( "***登録の完了***\n" );
break;
}*/
}
ruikei = i;
for( i = 0;i < ruikei - 1;i++ ){
for( j = 0;j < ruikei - 1;j++ ){
if( (strcmp( people[j].name, people[j + 1].name)) > 0 ){
strcpy( temp, people[j].name );
strcpy( people[j].name, people[j + 1].name );
strcpy( people[j + 1].name, temp );
}
else if( (strcmp( people[j].name, people[j + 1].name)) > 0 ){
check = 1;
k = 1;
len[0] = strlen( people[j].name );
len[1] = strlen( people[j + 1].name );
do {
if( (strcmp( people[j].name, people[j + 1].name)) > 0 ){
strcpy( temp, people[j].name );
strcpy( people[j].name, people[j + 1].name );
strcpy( people[j + 1].name, temp );
check = 0;
}
k++;
if( len[0] == k || len[1] == k ){
if( len[0] > len[1] ){
strcpy( temp, people[j].name );
strcpy( people[j].name, people[j + 1].name );
strcpy( people[j + 1].name, temp );
}
check = 0;
}
} while( check != 0 );
}
}
}
printf( "\n***登録結果***\n" );
for( i = 0;i < ruikei; i++ ){
printf( "%s\n", people[i].name );
printf( "誕生年:%s\n", people[i].birth_year );
printf( "誕生月:%s\n", people[i].birth_month );
}
}
|