[문제]
프로그램 사용자로부터 이름과 나이를 다음의 형식에 맞춰서 하나의 문자열로 받는다.
"홍길동 29"
"김영희 33"
이름은 세 글자가 아닐 수도 있고 영문으로 입력될 수도 있다. 단, 이름과 나이 사이에만 공백이 삽입되어야 한다. 이러한 형식으로 두 사람의 정보를 입력 받아서 이름과 나이가 각각 같은지 다른지를 판단하여 출력하는 프로그램을 작성해보자.
조건1) 나이는 숫자로 변환되어야 한다.
조건2) 구조체 사용하지 말 것
조건3) fgets함수를 이용하여 입력 받을 것
조건4) 변수는 다음과 같이 두 개만 사용할 것 str1[20], str2[20]
[실행결과]
첫 번째 사람 정보 입력: 홍길동 22
두 번째 사람 정보 입력: 홍길동 33
이름이 동일합니다.
나이가 같지 않습니다.
[코드]
#include<stdio.h>
int GetSpaceIdx(char* str);
int CompName(char* str1, char* str2);
int CompAge(char* str1, char* str2);
int main(void)
{
char str1[20];
char str2[20];
printf("첫 번째 사람 정보 입력: ");
fgets(str1, sizeof(str1), stdin);
str1[strlen(str1) - 1] = 0;
printf("두 번째 사람 정보 입력: ");
fgets(str2, sizeof(str2), stdin);
str2[strlen(str2) - 1] = 0;
if (CompName(str1, str2))
puts("이름이 동일합니다.");
else
puts("이름이 동일하지 않습니다.");
if (CompAge(str1, str2))
puts("나이가 같습니다.");
else
puts("나이가 같지 않습니다.");
return 0;
}
int GetSpaceIdx(char* str)
{
int i, len;
len = strlen(str);
for (i = 0; i < len; i++)
{
if (str[i] == ' ')
return i;
}
return -1; // 공백 문자가 존재하지 않으면 반환
}
int CompName(char* str1, char* str2)
{
int idx1 = GetSpaceIdx(str1);
int idx2 = GetSpaceIdx(str2);
if (idx1 != idx2) // 이름의 길이가 서로 다르면 다른 이름
return 0;
else
return !strncmp(str1, str2, idx1);
}
int CompAge(char* str1, char* str2)
{
int idx1 = GetSpaceIdx(str1);
int idx2 = GetSpaceIdx(str2);
int age1, age2;
age1 = atoi(&str1[idx1 + 1]);
age2 = atoi(&str2[idx2 + 1]);
if (age1 == age2)
return 1;
else
return 0;
}
<참고>
윤성우의 열혈 C 프로그래밍
'C 언어 > 연습문제' 카테고리의 다른 글
C언어 연습문제44 (0) | 2022.04.08 |
---|---|
C언어 연습문제43 (0) | 2022.04.08 |
C언어 연습문제41 (0) | 2022.04.06 |
C언어 연습문제40 (0) | 2022.04.06 |
C언어 연습문제39 (0) | 2022.04.01 |