본문 바로가기
ios 뽀개기/C언어

표준입출력& 배열

by 인생여희 2019. 11. 29.
반응형
 
 
#include <stdio.h>
 
 
//4.문자열을 입력 받을 때 키 입력 횟수 제한하기
 
int GetMyString(char buffer[] , int limit){
 
    int i;
 
    for (i = 0; i < limit; i++) { //최대 개수만큼 반복
 
        buffer[i] = getchar();
 
        if (buffer[i] == '\n') {    //엔터 키가 체크되면 사용자 입력이 완료되었다는 뜻
            buffer[i] = 0;         // 0 을 담아준다.
            return 1;               // 정상적으로 입력이됨
        }
 
    }
    //반복 문을 빠져나왔다는 것은 입력 개수를 초과했다는 뜻
    buffer[i] = 0;
    rewind(stdin);
    return 0;
}
 
int main(int argc, const char * argv[]) {
 
 
     //1.
    //getchar 함수를 사용하여 키보드에서 문자 한개 입력받기
    int input_data;
    //표준 입출력 함수를 사용해서 문자를 한개 입력 받음
    input_data = getchar();
    //입력받은 문자를 출력
    printf("input : %c \n" , input_data);
 
 
 
    //2. getchar 함수를 사용하여 문자 한 개씩 두번 입력받기 - rewind 함수를 사용하여 표준 입력 버퍼 초기화하기
 
    int input_data;
 
    //표준 입출력 함수를 사용해서 문자를 한개 입력 받음
    input_data = getchar();
    rewind(stdin);// 표준입력 버퍼에 있는 모든 입력값을 제거함
    printf("첫번째 input : %c \n" , input_data);
    input_data = getchar();
    rewind(stdin);
    printf("두번째 input : %c \n" , input_data);
 
 
 
    //3. gets 함수로 문자열 입력받기
    //문자열은 마지막에 null 문자 0을 포함해야 하므로 최대 9개의 문자까지 저장 가능함.
    char input_string[10];
    //gets(input_string);
    fgets(input_string , 10 , stdin); //문자열을 입력받아 input_string에 저장함.
    printf("input : %s \n" ,input_string);
 
 
 
    //4.문자열을 입력 받을 때 키 입력 횟수 제한하기
 
    char temp [10];
    int state;
 
    //사용자에게 최대 9개 까지만 입력 받겠다고 제한함.
    state = GetMyString(temp, 9);
    if (state == 1) {
        printf("input : %s \n" , temp);             //정상 입력함
 
    }else{
         printf("input : %s -> out of range \n" , temp); //범위를 초과함
    }
 
 
    //5. 문자열 형식의 숫자를 정수로 변환하기
    //pos_num은 각 자릿수에 곱할 숫자, num은 정수로 변환될 숫자를 저장할 변수
    int post_num = 100, num = 0 , i, temp_num;
    //정수로 변환할 문자열
    char num_string[4] = "123";
 
    for (i = 0 ; i < 3; i++) {
 
        //배열의 각항목을 문자에서 정수로 변경함
        temp_num = num_string[i] - '0';
 
        //정수화된 숫자에 자릿수에 해당하는 숫자를 곱해서 합산함.
        num = num + (temp_num * post_num);
 
        post_num = post_num / 10;
 
    }
 
    //변환된 정수 값을 출력
    printf(" %s -> %d \n" , num_string , num);
 
 
 
  //6. 길이 제한 없이 문자열 형식의 숫자를 정수로 변환하기
 
    int num = 0, count = 0;
    char num_string[4] = "123";
 
    //문자열이 끝날때까지 반복함
    while (num_string[count] != 0) {
 
        num = num * 10 + (num_string[count] - '0'); //반복할때마다 이전값에 10을 곱해서 자릿수를 증가.
 
        count++;            //다음문자로 이동
    }
 
    printf(" %s -> %d \n" , num_string , num);
 
 
 
 
 
    //7.scanf 함수를 이용해서 나이 입력받기
 
    int num = 0;
    //정상적인 나이를 입력할때까지 무한반복을 사용
 
    while (1) {
        printf("input age : ");
 
 
 
        //scanf 함수는 실행에 실패하면 0을 반환
        if (scanf("%d" , &num) == 0) {
            rewind(stdin);
            printf("정확한 수를 입력하세요.");
        }else{
 
            //0보다 크고 130 이하인 숫자만 정상적인 나이로 인정
            if (num > 0 && num <= 130) {
                break; //정상적으로 입력이 되었기 때문에 반복문을 빠져나감.
            }else{
 
                //나이의 범위가 잘못되었다고 출력
                printf("incorrect age ! \n");
            }
 
        }
 
 
    }
 
    printf("your age : %d \n " , num);
 
 
    //-----------------배열---------------
 
 
    //배열 표기법의 한계
    int data[2] = {0x12345678 , 0x12345678};
    printf("%d \n" ,data[0]); //
    data[0] = 0x22;
    printf("%d \n" ,data[0]);
 
 
    //배열표기법 대신 포인터표기법 사용
 
    *(char *) (data +1) = 0x22; //일시적으로 int* 형을 char* 형으로 변환함.
 
    printf("%d \n" ,data[0]);
 
 
 
    int tips = 0x12345678, sum;
    char *p; //1바이트씩 접근하기위해 char* 형 포인터를 선언함
    p = (char *) &tips; // 형변환해서 char* 로 맞춤.
    sum = *(p +0) + *(p +1) + *(p +2) + *(p +3);
    printf("%d \n" , sum);
    return 0;
}
 

 

do it c 언어 참고

반응형

'ios 뽀개기 > C언어' 카테고리의 다른 글

반복문 실습 - 별그리기  (130) 2019.11.19
비트연산  (269) 2019.11.18
자료형  (266) 2019.11.18
c언어 기초4  (614) 2019.05.22
c언어 기초 3  (597) 2019.05.21

댓글