본문 바로가기

C 언어/연습문제

C언어 연습문제42

[문제]

프로그램 사용자로부터 이름과 나이를 다음의 형식에 맞춰서 하나의 문자열로 받는다.

"홍길동 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