#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 100


// 주어진 문자열에서 또 다른 주어진 문자를 제거하고 압축한 후에,
// 역 순화 시킨 문자열을 만들어주는 함수 revsqueeze(s,c)를 만드시오.
// ex) abcabc b (입력) -> caca(출력) 

// revsqueeze 함수 선언

char* Revsq(char* pstr,char c);

int main(void) {

   char str[MAX]; // 문자열이 입력 될 배열.
   char s;   // getchar로 받을 변수
   char c;   // 제거하기 원하는 문자.
   int cnt = 0;   // => 배열의 인덱스.

   char* result;

      puts("문자열을 쓰고 제거할 문자를 입력하세요.");
      while ((s = getchar()) != '\n')
      {
         if (s == ' ') {
            s = getchar();
            c = s;
         }
         else
            str[cnt] = s;
         cnt++;
      }
      str[--cnt] = '\0'; // 마지막 NULL 입력
      // printf("str = %s c = %c\n",str,c);
      result = Revsq(str, c); // revsq해준 값을 받는 결과 변수.
      printf("\n%s\n", result);
      return 0;
}

/*
RevsQueeze 함수 
1. c를 제거한다
2. 거꾸로 저장.
*/

char* Revsq(char* pstr, char c) {
   int cnt = strlen(pstr)+1; // ex) str="abc" strl=3, cnt=4
   int j = 0;
   char* temp = (char*)malloc(strlen(pstr) + 1);  //새로운 문자열이 저장될 포인터.temp의 유동적 메모리 할당
   for (; cnt >= 2; cnt--) { // ex) cnt = 4..3..2..
      if (*(pstr + cnt - 2) != c) // *(pstr(0)+cnt(4)-2)='c'(인덱스가 2인 세번째 요소.)
         *(temp + j++) = *(pstr + cnt - 2);
      else
         continue;
   }
   *(temp + j) = '\0';
   return temp;
}

실행결과 

abcabc b 입력하면
caca로 출력됨.

주의사항 

1. 반드시 포인터 활용.

 

현재상황 - 이해불가.

C언어로 만드는

랜덤 UP & DOWN GAME

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int main(void){

srand(time(NULL));
int num = rand() % 100 + 1; // 1 ~ 100 사이의 숫자
printf("숫자: %d\n",num);
int answer = 0; // 정답
int chance =5; // 기회
while (chance >0) // 1은 참 0은 거짓
{
    printf("남은기회 %d 번\n", chance--);
    printf("숫자를 맞혀보세요 (1~100): ");
    scanf("%d", &answer);

    if (answer > num)
        {
        printf("DOWN ↓\n\n");
        }
    
    else if (answer < num)
        {
        printf("UP ↑\n\n");
        }
    else if (answer == num)
        {
        printf("정답입니다 !\n\n");
        break;
        }
    else{
        printf("알 수 없는 오류가 발생했어요\n\n");
        }
    if (chance == 0) 
        {
        printf("모든 기회를 다 사용하셨네요. 아쉽게 실패했습니다.\n");
        break;
        }
    }
}

C언어 - if문 break와 continue

break

#include <stdio.h>

int main(void)
{
	for ( int i = 1; i <= 30; i++)
    {
    	if( i >= 6)
        {
    	printf("나머지 학생은 집에 가세요\n");
        break;
        }
        printf("%d번 학생은 조별 발표를 준비하세요.\n",i);
	}
    return 0;
}

실행결과

1번 학생은 조별 발표를 준비하세요.
2번 학생은 조별 발표를 준비하세요.
3번 학생은 조별 발표를 준비하세요.
4번 학생은 조별 발표를 준비하세요.
5번 학생은 조별 발표를 준비하세요.
나머지 학생은 집에 가세요

break가 적힌 부분 부터 for 반복문을 빠져나오게 된다. 

continue

#include <stdio.h>

int main(void) {
	for (int i = 1; i <= 30; i++)
    {
    	if(10 >= i && i >= 6)
        {
        	if( i == 7)
            {
            	printf("%d 번 학생은 결석입니다.\n", i);
                continue;
            }
            printf("%d번 학생은 조별 발표를 준비하세요.\n", i);
        }
    }
}

실행결과

6번 학생은 조별 발표를 준비하세요.
7번 학생은 결석입니다.
8번 학생은 조별 발표를 준비하세요.
9번 학생은 조별 발표를 준비하세요.
10번 학생은 조별 발표를 준비하세요.

 

만약에 continue 함수를 쓰지 않았다면 실행 결과는  


6번 학생은 조별 발표를 준비하세요.
7번 학생은 결석입니다.

7번 학생은 조별 발표를 준비하세요.
8번 학생은 조별 발표를 준비하세요.
9번 학생은 조별 발표를 준비하세요.
10번 학생은 조별 발표를 준비하세요.

 

이렇게 나오게 된다.

즉 continue의 의미는 해당 결과를 그대로 지나쳐가고 

다른 번호의 함수를 진행하라는 뜻이다.

+ Recent posts