예제 2) 시,분,초를 입력받아 초로 환산하여라.


배운 내용대로 구성하자면 ' ' - 공백으로 구분하여 각각 시분초 변수에 입력받고 연산을 결과값에 누적시켜주는 것으로 완성.


#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
	//TODO : 시 분 초를 입력받아 초로 변환
	int hour, minute, second, result;

	cout << "시, 분, 초 를 ' '으로 구분하여 입력하세요 : ";
	cin >> hour >> minute >> second;

	result = hour * 3600;
	result += minute * 60;
	result += second;

	cout <<"시간을 초로 환산한 값은 " << result <<" 입니다.";
}


조금 더 나아가서 C-String을 사용하면 공백문자로 아리쏭하게 입력받는 것이 아닌

 x : x : x 로 입력 받는 것이 가능할 것 같다.


#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
	char inputTime[50];
	int result = 0;
	char temp[10];

	cout << "시:분:초 를 입력하세요 : ";

	for (int i = 0; i < 2; i++)
	{
		cin.getline(inputTime, 50, ':');
		strcpy_s(temp, inputTime);

		if (i == 0)
		{
			result += atoi(temp) * 3600;
		}
		else if (i == 1)
		{
			result += atoi(temp) * 60;
		}
	}
	result += atoi(inputTime);

	cout << "시간을 초로 환산한 값은 " << result << " 입니다.";
}


이렇게 하면 조금 더 자연스럽게 시:분:초 를 입력할 수 있다. 큰 차이는 없지만 스페이스바로 띄워서 구분하는 것보다 ':'를 기준으로 구분하는 것이..조금의 차이점?



블로그 이미지

irostub

iro의 잡화상점

,

예제 1)


cm로 값을 입력받아 feet&inch로 표현하여라.


결과 예)

키를 cm로 입력하세요 : 190

6feet 2inch 입니다.


#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
	int cm, feet, inch = 0;
	cout << "키(cm)를 입력하세요 : ";

	cin >> cm;

	inch = cm / 2.54f;
	feet= inch / 12;
	inch %=12;

	cout << feet<<" feet "<< inch<<" inch 입니다.";


문제점. inch의 정확한 소수점 표현 실패


조금 생각해서 Float 변수 선언해주고 나눗셈 결과를 Float 변수와 int 변수에 저장해서

int 변수에 들어가있는 제수를 Float 변수에서 빼줬다.


일단 꽤 정확하게 나오는데는 성공했지만, 문제는 보기에 이쁘지않다는 것


실행 결과가 xx feet 0.xxxxxxinch 입니다.

'0.' 이녀석 지우고싶다.



#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
	int cm, feet;
	float inch, temp;
	cout << "키(cm)를 입력하세요 : ";

	cin >> cm;

	inch = cm / 2.54f;
	feet= temp = inch / 12;
	inch = temp-feet;

	cout << feet<<" feet "<< inch<<" inch 입니다.";
}


블로그 이미지

irostub

iro의 잡화상점

,

#include <stdio.h>


길이가 10인 배열 선언 총 10개 정수 입력, 홀수 짝수 구분지어 출력, 홀수 선출력 후 짝출력, 10개정수 메인에서 입력, 배열내에 존재하는 짝수만 출력하는 함수를 각각정의해서 이 두 함수를 호출하는 방식으로 프로그램 완성



=========================



윤성우의 열혈 C프로그래밍 <도전! 프로그래밍2>에 나온 2번 문제이다.


문제의 실행 예시에서 출력부분의 


홀수 출력 : 1, 3, 5, 7, 9

짝수 출력 : 2, 4, 6, 8, 0


이런 식으로 맨 마지막의 출력 숫자 뒤에는 ' , ' 를 찍지 않는 것 때문에 골머리를 앓았다.


생각지 못한 여러가지 방법이 있겠지만 나는 입력받은 모든 배열을 검사하여 홀, 짝을 전역 변수에 카운트 하였고 카운트된 횟수를 바탕으로 ' , ' 없이 출력될 숫자를 if문으로 구분지었다.


나름 깔끔하게 마무리 된 것 같다.


역쉬, 전역 변수는 편리하다....

블로그 이미지

irostub

iro의 잡화상점

,

visual studio2017(ver 15.5.2) 버전업이 되면서 Win32 콘솔 응용프로그램 프로젝트를 만드는 방법이 달라졌다.


만약 C언어 교재를 이용해 공부하는 분들은 2017 이전 버전의 설명이라면 당황스러울 것.


스크린 샷으로 설명하겠다.


파일 - 새로 만들기 - 프로젝트 (Ctrl + Shift + N) 을 선택해준다.




템플릿 카테고리에서 Visual C++ 하위의 Windows 데스크톱을 선택해주면 목록이 나온다. Windows 데스크톱 마법사를 클릭해준 후 확인을 눌러준다.



이후 나온 화면에서 빈 프로젝트가 체크 해제 되있고 SDL검사가 체크되어있을 것이다. 그림과 같이 빈 프로젝트는 체크해주고 SDL은 체크 해제 해준다.


SDL을 해제하지 않아도 되지만 해재하지 않는다면 보안에 문제가 되는 함수들에 조언이 뜰 것이다. 공부하시는 분들은 체크 해제 하는게 기존 환경과 더 비슷할 것.




Win32 콘솔 응용 프로그램으로 실행했을 때와 같은 환경으로 시작하게된다.


왜 자꾸 바뀌는거야...








블로그 이미지

irostub

iro의 잡화상점

,

Visual Studio 2017이 버전업 되면서 기존에 사용하던 문자열 배열의 초기화에 문제가 생겼다.




"char"형식의 값을 사용하여 "char *" 형식의 엔터티를 초기화할 수 없습니다. 라는 문구가 나온다. 약간 시간이 지난 C언어 교재를 이용하고 있었다면 겪을 수 있는 문제.


해결 방법은 간단하다. 

솔루션 탐색기(ctrl + alt + L) 연 다음 작업하고 있는 소스파일의 확장자를 .cpp 에서 .c로 변해준다. 



.cpp확장자는 c++의 소스파일 확장자다.


.cpp확장자에서 C언어를 사용 못하는 것은 아니다. 근데 가끔 저런 문제가 생겨서 그렇지..



#include<iostream>

using namespace std;

를 사용하고 있었다면 .c로 확장자를 바꾸면 더 이상 사용할 수 없다.


블로그 이미지

irostub

iro의 잡화상점

,

import java.util.Scanner;


public class StarDot_While_Back {


public static void main(String[] args) {

// TODO Auto-generated method stub



Scanner firstNum = new Scanner (System.in);

int k = firstNum.nextInt();

int i = k;

int j = i;

while(i>0) {

j = i;

while(j<=i && j>0) {

System.out.print("*");

j--;

}

System.out.println();

i--;

}

}

}



블로그 이미지

irostub

iro의 잡화상점

,

import java.util.Scanner;


public class StarDot_For_Back {


public static void main(String[] args) {

// TODO Auto-generated method stub


Scanner firstNum = new Scanner (System.in);

int k = firstNum.nextInt();

for(int i = k; i > 0 ; i--) {

for(int j = i; j<=i && j>0; j--) {

System.out.print("*");

}

System.out.println();

}

}


}



블로그 이미지

irostub

iro의 잡화상점

,

import java.util.Scanner;


public class StarDot_While {


public static void main(String[] args) {

// TODO Auto-generated method stub


int b = 0, c = 0;

Scanner firstInNum = new Scanner(System.in);

int a = firstInNum.nextInt(); // a = 입력받을 수


if(a>0) {

while(b<a) {

c=0; //while문 초기화 ㅡㅡ

while(c<=b) {

System.out.print("*");

c++;

}

System.out.println();

b++;

}//end while

}//end if

else {

System.out.println("잘못입력하신 것 같습니다. 양의 정수를 입력해주세요.");

}

}


}



블로그 이미지

irostub

iro의 잡화상점

,