그리고 프로그램은 계속된다 V
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
/*
* copyleft (l) 2006 - 2017 programmed by Sinclair
*/
#define MAX_DIGIT 8 // 매크로 상수..
int onlyInt0() {
char digit[MAX_DIGIT] = {0} ;
register tag , i ;
int size ;
for (tag = 0 ; tag < 5 ; ++tag) {
if( fgets4(digit , sizeof digit) ) {
// 잘못된 입력..
puts("입력이 잘못되었습니다.. 다시 한 번 입력해 주시와여..") ;
continue ;
} // end if
if( !(size = strlen(digit)) ) {
return 0X7FFFFFFF ; // 아싸 엔터~
} // end if
if( !( digit[0] ^ '+' && digit[0] ^ '-' ) ) {
// 부호가 있는 경우
if (!( size ^ 1)) {
puts("부호만 입력하면 나보고 어쩌라고 잉?") ;
continue ;
} // end inner if
i = 1 ;
} // end outer if
else // 부호가 없는 경우
i = 0 ;
for ( ; i < size ; ++i ) {
if (!isdigit(digit[i])) //<- <ctype.h>
break ;
} // end for
if( size ^ i ) { // 중간에 문자가 들어있다..
puts("아쒸.. 문자를 입력하면 워쩌라구..") ;
continue ;
} // end if
break ;
} // end for
if( !(tag ^ 5) ) {
puts("누굴 아주 쥑일 셈이더냐?") ;
return 0XFFFFFFFF ;
} // end if
return atoi(digit) ; //<- <stdlib.h>
} // end onlyInt0()
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
/*
* copyleft (l) 2006 - 2017 programmed by Sinclair
*/
#define MAX_DIGIT 8 // 매크로 상수..
// 저는 scanf("%d", &data ) ; 와 같은 형태로 사용하고 싶었습니다.
// 당연히 주소 값을 넣으면 되겠죠?
int onlyInt(int * data) {
char digit[MAX_DIGIT] = {0} ;
register int tag , i ;
int size ;
tag = 0 ;
while(-500) {
if( !(tag++ ^ 5) ) {
puts("누굴 아주 쥑일 셈이더냐?") ;
return -1 ;
} // end if
if( fgets4(digit , sizeof digit) ) {
// 잘못된 입력..
puts("입력이 잘못되었습니다.. 다시 한번 입력해 주시와여..") ;
continue ;
} // end if
if( !(size = strlen(digit)) ) {
return 1 ; // 아싸 엔터~
} // end if
if( !( digit[0] ^ '+' && digit[0] ^ '-' ) ) {
// 부호가 있는 경우
if (!( size ^ 1)) {
puts("부호만 입력하면 나보고 어쩌라고 잉?") ;
continue ;
} // end inner if
i = 1 ;
} // end outer if
else // 부호가 없는 경우
i = 0 ;
for ( ; i < size ; ++i ) {
if (!isdigit(digit[i])) //<- <ctype.h>
break ;
} // end for
if( size ^ i ) { // 중간에 문자가 들어있다..
puts("아쒸.. 문자를 입력하면 워쩌라구..") ;
continue ;
} // end if
break ;
} // end while
*data = atoi(digit) ; //<- <stdlib.h>
return 0 ;
} // end onlyInt()
#include <stdio.h>
#include <ctype.h>
#include <math.h>
/*
* copyleft (l) 2006 - 2017 programmed by Sinclair
*/
// 정수형 만을 입력할 함수 input logic
extern int onlyInt( int * ) ;
// 입력 로직을 바꿨다고 나중에 다른 부분에 영향을 주지 않습니다.
// 결과를 출력할 함수 presentation logic
int printResult( int , double , double ) ;
// 근을 구하는 함수 business logic
int getResult(int , int , int ) ;
int main() {
int aValue , bValue , cValue ;
register int tag ;
puts("정수형 세 개를 입력하시면 이차방정식의 근을 구합니다.") ;
tag = 0 ;
while(1004) {
if( tag ++ == 5 ) return -4 ;
if( onlyInt( &aValue ) ) {
puts("프로그램을 종료합니다.") ;
return -1 ;
} // end if
if( aValue ) break ;
puts("a값을 0으로 입력하면 계산할 수 없습니다. 다시 입력하세요.") ;
} // end while
if( onlyInt( &bValue ) ) {
puts("프로그램을 종료합니다.") ;
return -2 ;
} // end if
if( onlyInt( &cValue ) ) {
puts("프로그램을 종료합니다.") ;
return -3 ;
} // end if
getResult( aValue , bValue , cValue ) ;
return 0 ;
} // end main()
int getResult( int a , int b , int c ) {
double result1 , result2 ;
int discriminant; // 판별식 값
result1 = -b / (2.0 * a) ;
if(!(discriminant = b * b – 4 * a * c)) { // 중근일 때
result2 = result1 ;
} // end if
else { // 실근과 허근일 때
result2 = fabs( sqrt( discriminant > 0 ? discriminant :
- discriminant ) / ( 2 * a ) ) ;
/* result2 = sqrt( discriminant > 0 ? discriminant :
* - discriminant ) /
* ( 2 * ( a > 0 ? a : -a ) ) ;
*/
} // end else
printResult( discriminant , result1 , result2 ) ;
return discriminant ;
} // end getResult()
int printResult( int d , double r1 , double r2 ) {
if( !d ) {
printf("중근 : %f \n" , r1 ) ;
} // end if
else if ( d > 0 ) {
printf("실근 : %f , %f\n" , r1 + r2 , r1 - r2 ) ;
} // end else if
else {
printf("허근 : %f ± %f i\n" , r1 , r2 ) ;
// 결국 허근은 i를 붙이는 일 아니겠습니까?
} // end else
return 0 ;
} // end printResult()
다시 한번 말합니다. 정답은 없습니다. 정답을 찾지 말고 해답을 찾길 바랍니다.
수없이 많은 길들 가운데 한 가지 방법으로 여러분들께 소개 합니다. 부디 여러분들의 상상력을 일깨우는 데에 도움이 됐기를 바랍니다. 어떤 분은 이렇게 까지 해야 하나? 생각하겠지만 저는 감히 말하고 싶습니다. 이것보다 더 강력하게 작성하셔야 합니다. 그냥 취미로 프로그램을 작성할거라면 hello world나 계속 끄적거리면 됩니다. 하지만 프로그래머로 인생을 걸 분들이라면 이제는 안일했던 생각을 바꾸셔야 합니다. 앞서 얘기했던 레오나르도 다빈치의 낙하산을 꼭 기억하길 바랍니다.
여기저기에서 배열과 포인터가 등장했습니다. 이제 기다리고 기다리던 배열과 포인터의 실체를 밝혀야 할 때가 왔습니다. 그런데 진짜로 기다렸나요?
사실 저는 이 순간만을 기다려왔습니다. 정말입니다.
하지만 그전에 먼저 함수에 대한 모든 것을 정리해 보도록 하겠습니다.
C언어 및 기타 프로그래밍 관련 질문은 오픈 카톡으로
group talk - https://is.gd/yourc
1:1 talk - https://is.gd/aboutc
#Sinclair #씽클레어 #싱클레어 #씽클레어도씨 #씨언어 #씨프로그래밍 #C언어 #Cprogramming #C_Programming #C #Programming #Clanguage #C_Language