#include <stdio.h>
#include <string.h> //문자열 길이를 구하는 strlen 함수를 사용하기 위해서
#include <stdlib.h>   //  atoi 함수를 사용하기 위해
 
 //14 - 10 문자를 정수로 변환
int ArrayToInteger(char string[]){
 
    int count = 0, num = 0;
    //문자열이 끝날때 까지 반복
    while (string[count] != 0) {
        //반복할 때마다 이전 값에 10을 곱해서 자릿수를 증가시킴
        num = num * 10 + string[count] - '0';
        count++;
 
    }
    return num;
}
 
 
/*
 buffer : 사용자가 입력한 문자열을 저장할 배열
 limit : 최대 입력 가능한 문자개수
 1반환 : 정상입력
 0반환 : 제한된 개수만 받았다
 */
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;                   //정상적으로 입력이 완료됨
        }
    }
 
    //반복문을 빠져 나왔다는 뜻은 입력 개수 제한을 초과했다는 뜻
    //현재 위치에 0을 넣고 문자열 구성 완료
    buffer[i] = 0;
    rewind(stdin); //표준 입력 버퍼에 남아있는 문자들을 제거함.
    return 0;          //입력 초과 현상이 발생했음을 알림.
}
 
 
int main(int argc, const char * argv[]) {
 
    /*
    //14 - 1 표준 입력 함수를 사용하여 문자를 한개 입력 받음
    int input_data;
    input_data = getchar();
    // 입력받은 문자를 출력
    printf("input : %c \n" , input_data);
    //input : d
 
 
     //14 - 2 표준 입력 함수를 사용하여 문자를 한개 입력 받음
    int input_data2;
    input_data2 = getchar();
    printf("첫문자 : %c \n" , input_data2);
    input_data2 = getchar();
    printf("둘째문자 : %c \n" , input_data2);
 
 
    //14 - 3
    int input_data3 = getchar();
    rewind(stdin);      //표준 입력 버퍼에 있는 모든 입력값을 제거함.
    printf("first input : %c\n", input_data3);
    input_data3 = getchar();
    rewind(stdin);
    printf("second input : %c\n", input_data3);
 
 
 
    //14 - 4 마지막에 0을 포함해야 하므로 최대 9개의 문자까지 저장 가능
    char input_string[10];
    gets(input_string);
    printf("input string : %s \n" , input_string);
 
 
 
    //14 - 5 반환값이 NULL이 아니라 문자열을 입력 받아서 input_string에 저장함
    char input_string2[10];
    if (NULL != gets(input_string2)) {
        printf("input_string2 : %s \n" , input_string2);
    }else{
        printf("input => canceled \n");
    }
 
 
 
    //14 - 6 입력할 문자열 개수 지정
    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); // 범위를 초과
    }
 
 
    //14 - 7 문자를 정수로 변환
 
     //pos_num은 각 자릿수에 곱할 숫자, num은 정수로 변환될 숫자를 저장할 변수
 
    int pos_num = 100, num = 0 , i, temp_num;
    //정수로 변환할 문자열
    char num_string[4] = "423";
 
    for (i = 0; i < 3; i++) {
 
        //배열의 각 항목을 문자에서 정수로 변경
        temp_num = num_string[i] - '0';
        printf(" temp_num -> %d \n"  , temp_num);
        //정수화된 숫자에 자릿수에 해당하는 숫자를 곱해서 합산
        num = num + temp_num * pos_num;
 
        //다음 자릿수를 구성하기 위해서 10을 나눔. 100 -> 10 -> 1
        pos_num = pos_num / 10;
    }
    printf(" %s -> %d \n" , num_string , num);
 
 
 
 
    //14 - 8 문자를 정수로 변환
    int pos_number = 1, number = 0, i , countNum;
    char number_string[4] = "123";
    //문자열의 길이를 구해서 countNum 변수에 3이저장
    countNum = strlen(number_string);
 
    //문자열의 길이보다 1만큼 작게 반복하기 위해
    //10 * 10 * 10 = 1000  이 아니라 10 * 10 해서 100이 되어야 한다.
    printf("countNum -  : %d \n" , countNum);       //3
    //반복 1회마다 10씩 증가 1-> 10 -> 100
    for (i = 0; i < countNum - 1; i ++) {
        pos_number = pos_number * 10;
        printf("pos_num -  : %d \n" , pos_number);    // 10, 100
    }
 
    //문자열의 길이 만큼 반복
        for (i = 0; i < countNum; i++) {
            number = number + (number_string[i] - '0' ) * pos_number;
            pos_number = pos_number / 10;
            printf("number - v  : %d \n" , number);                 //100    , 120
            printf("pos_num - v  : %d \n" , pos_number);        //10,    1
        }
        printf(" %s -> %d \n", number_string , number);     // 123 -> 123
 
 
     //14 - 9 문자를 정수로 변환
    int num = 0, count = 0;
    char num_string[4] = "123";
    //문자열이 끝날 때까지 반복
    while (num_string[count] != 0) {
        //반복할 때마다 이전 값에 10을 곱해서 자릿수를 증가시킴
        //num의 변화 : 1 * 10 + 1 -> 12 * 10 + 2 -> 123
        num = num * 10 + (num_string[count] - '0');
        count++;    //다음문자로 이동
        printf(" num : %d \n" , num);
        // num : 1
        //num : 12
        //num : 123
    }
    printf(" %s -> %d \n" , num_string , num);
 
 
      //14 - 10 문자를 정수로 변환 - gets
    int first_num, second_num;
    char first_string[16] , second_string[16];
 
    printf("input first number : ");
    gets(first_string);     //첫번째 숫자를 입력받음
    printf("input second number : ");
    gets(second_string);  //두번째 숫자를 입력받음
 
    first_num = ArrayToInteger(first_string);               // 문자열 -> 정수
    second_num = ArrayToInteger(second_string);    //문자열 -> 정수
 
    printf("%d + %d = %d \n" , first_num, second_num , first_num+second_num);
 
 
 
    //14 - 11 문자를 정수로 변환 - atoi
    int first_num, second_num;
    char first_string[16] , second_string[16];
    printf("input first number : ");
    gets(first_string); // 첫 번째 숫자를 입력받음
    printf("input second number : ");
    gets(second_string);   //두 번째 숫자를 입력받음
 
    first_num = atoi(first_string);
    second_num = atoi(second_string);
    // 정수로 변환된 두 수를 합산한 결과 출력
    printf("%d + %d = %d\n", first_num, second_num, first_num + second_num);
 
 
 
    //14 - 12 입력    -  scanf
    int int_data;
    float float_data;
 
    scanf("%d" , &int_data);        //정수 값을 입력 받는다.
    scanf("%f" , &float_data);      //실수 값을 입력받는다.
    printf("input : %d, %f\n", int_data, float_data);       // 5 , 55.5
 
 
 
 
     //14 - 13 입력
    char temp[32];
    scanf("%s" , temp); //문자열을 입력받음. 배열 변수 이름을 사용하면 해당 배열의 시작 주소를 의미하기 때문에 &연산자를 쓰면안된다.
    printf("input string : %s \n", temp);
 
 
     //14 - 14 진수 변환
    int num1, num2, num3;
    scanf("%o %d %x", &num1, &num2 , &num3); // 8, 10, 16진수 입력받는다.
    printf("input : %d, %d, %d \n" , num1, num2, num3);
    //10
    //10
    //10
    //input : 8, 10, 16
 
 
 
 
    //14- 15 응용
 
    int num = 0;
    //정상적인 나이를 입력할 때까지 무한 반복
    while (1) {
        printf("input age : ");
        scanf("%d" , &num);     //한개의 정수 값을 입력 받음
 
        if (num > 0 && num <= 130) {
            break;  //정상입력 -> 반복문 빠져나감
        }else{
            //나이 범위 잘못되었다고 알림
            printf("잘못된 나이! \n");
        }
    }
 
    printf("당신의 나이는 : %d  입니다.\n" , num);   //문자열 입력하면 무한반복
 
     */
 
     //14- 16 응용
 
    int num = 0;
    while (1) {
        printf("input age : ");
 
        // scanf 함수는 실패하면 0을 반환한다.
        if (scanf("%d" , &num) ==0) {
            rewind(stdin);      //입력 버퍼를 모두 비운다.
            printf("enter digit number ! \n");
        }else{
 
 
            if (num > 0 && num <= 130) {
                break;
            }else{
                printf("잘못된 나이! \n");
            }
        }
    }
    printf("당신의 나이는 %d  입니다. \n" , num);
 
 
 
 
 
    return 0;
}
 

 

 

do it c언어 책 참고

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

비트연산  (0) 2019.11.18
자료형  (0) 2019.11.18
c언어 기초4  (1) 2019.05.22
c언어 기초 3  (0) 2019.05.21
c언어 기초2  (0) 2019.05.17
c언어 기초1  (0) 2019.05.16

+ Recent posts