반응형
#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언어 책 참고
반응형
댓글