교 향
Maximalism
교 향
전체 방문자
오늘
어제
  • 전체글
    • Coding
    • Linux
    • Docker
    • Python
    • AI
      • GPT
      • Pandas
      • Numpy
      • tensorflow
      • pytorch
      • openCV
      • Study
      • AIconnect - [GPT]한국어..
    • Data structure, OS
    • Competitions
    • Investment
    • Book
    • Health
    • Trip
    • Memo
    • 대학원

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • AI면접 #딥러닝면접 #인공지능면접 #기울기소실 #GradientVanishing
  • ActivationFunction #활성화함수 #인공지능면접

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
교 향

Maximalism

2010 9월 13일 수업내용.
Coding

2010 9월 13일 수업내용.

2010. 12. 17. 16:52


간단한 사칙연산을 이용, 두 수와 사칙연산을 선택한 후
답을 출력하여 재 사용 여부를 묻는 소스



#include <stdio.h>

int main(void)

{

 float num1, num2; //실수형변수 num1, num2를 선언
 char k, re;           //문자열변수 k,re선언

 while(1)              //반복문, 조건은 '참'
 {
 printf("첫번째 수를 입력하세요: "); //수입력1
 scanf("%f" , &num1);                  //scanf를 이용해 num1에 주소값(실수)을 받아옴

 printf("두번째 수를 입력하세요: "); //수입력2
 scanf("%f" , &num2);                  //scanf를 이용해 num2에 주소값(실수)을 받아옴

 fflush(stdin);                             //쉽게 말해, 버퍼에 남은 '\n'값을 제거하기 위해 사용함
                                                            

fflush(stdin); 


--------------------------------------------------
함수 : int fflush (FILE *stream)
이 함수는 스트림상에서 버퍼화된 어떤 출력을 파일로 배달하는 역할을 한다.  만약 스트림
이 널 포인터라면 fflush는 열려진 모든 출력 스트림의 버퍼화된 출력을 강제로 관련 파일에
내보낸다.  이 함수는 만약 쓰기 에러가 발생하면 EOF를 리턴하고, 아니면 0을 리턴한다.
호환성 노트 : 어떤 머리가 모자라는( 음... 이 표현이 가장 적당한 것 같다. 키키키...) 운영
체제는 새줄 기호를 만나면 라인 버퍼된 스트림을 쏟아내는 라인-지향 입력과 출력으로 완전히
고정시켜 놓은 것으로 알려져있다!  하지만, 다행스럽게도 이 "특징"은 일반적인 현상은 아닌
것 같다. 당신은 이 GNU 시스템에 대해서는 아무런 걱정할 필요가 없다.


Trackback : http://turboc.borlandforum.com/impboard/impboard.dll/trackback?sn=42126
--------------------------------------------------


※네이버 지식인 펌글

원래 fflush 의 기본은 파일 스트림의 내용 제거에 있는데

기본으로는 stdin 이 아니라 stdout 전용입니다

 

뭐. 그렇지만 표준이란 이상하게 지키기 어려운 법이니.

( 웹에서 프로그램 설치하는 activeX 도 표준이 아니란.. )

 

현재 기본적인 면에서만 보면

대부분의 경우 이 함수는

버퍼에 남은 \n 을 제거하기 위해 사용합니다

 

보통 우리가

12345

이렇게 치고 enter 키를 누르면

 

12345\n

 

이렇게 마지막을 표시해주는 \n 이 생기는데

이 것은 어디까지 읽어야 하나를 해결해주는데 사용됩니다

 

이 상태에서 scanf("%d") 를 사용한다면

\n 전의 1235 까지 읽어버리고 지워버리지요

그러면 남아있는 내용은

\n

 

근데 입력을 받을 경우 저 남아있는 \n 때문에

입력이 넘어가는 경우가 있는데

 

12345  를 치게 되면

\n12345\n 이 되는데

이 상태에서 scanf("%d") 를 한다면

\n 을 읽고 나서 데이터의 끝으로 생각하고 넘어가게 됩니다.

 

그 때 이 함수를 사용합니다.

 

그렇지만 !

 

표준적인 사용법은 아니기 때문에

윈도우즈가 아닌 다른 운영체제에서 이런 방식으로 사용하면

찾기 어려운 에러가 나올 확률이 매우 높거나

작동을 안할 확률이 높지요

 

추가로

stdin 이란

Standard Input ( 기본 입력 스트림 ) 인데

스트림이란 통로인데 이건 C++ 가면 기본 개념으로 배우실 테고

기본 입력 스트림이란

우리가 입력 받는 키보드 등의 자료를 저장하는 버퍼( 저장소 ) 를 말합니다

FILE 스트림의 일종인데

이건 나중에 파일 관련 부분 가면 부분적으로 배우실 것입니다

이걸 자세히 알고 싶으시면 Linux 를 추천.


 printf("사칙연산을 입력하세요(+,-,*,/): "); //사용할사칙연산을 입력
 scanf("%c" , &k);                                 //문자열을 k값에 주소지정

 if( k=='+' )             //만약 k가 덧셈일 경우
 {
  printf("%.2f + %.2f = %.2f입니다.\n" , num1, num2, num1+num2); //(소수점둘째자리까지)덧셈 결과 출력
 } else if(k=='-') {   //만약 k가 뺄셈일 경우
  printf("%.2f - %.2f = %.2f입니다.\n" , num1, num2, num1-num2); //(소수점둘째자리까지)뺄셈 결과 출력
 } else if(k=='*') {   //만약 k가 곱셈일 경우
  printf("%.2f * %.2f = %.2f입니다.\n" , num1, num2, num1*num2); //(소수점둘째자리까지)곱셈 결과 출력
 } else if (k=='/') {  //만약 k가 나눗셈일 때
  if(num2==0)printf("0으로 못나와 \n"); //num2값에 0이 입력됬을때 나눗셈 불가
  else printf("%.2f / %.2f = %.2f입니다.\n" , num1, num2, num1/num2);//(소수점둘째자리까지)나눗셈 결과 출력
 }
 else {
 printf("잘못된 사칙연산을 입력하였습니다.\n");  //윗 사칙연산 외 나머지 모든 경우에 출력
 }

 fflush(stdin);
 printf("Retry? (y/n) : ");   //재사용 여부
 scanf("%c" , &re);          //문자열을 're값'으로 주소지정
 if(re=='n') break;            //'n'입력시 빠져나옴

 }

return 0;

}


-출력 결과-

'Coding' 카테고리의 다른 글

터미널창에서 글자를 복사할 땐  (0) 2022.10.06
파이썬 스니펫(조각코드 모음집, 위키독스)  (0) 2022.09.22
크롤링 코드 샘플  (0) 2022.07.22
pipreqs - 설치한 라이브러리만 requirements로 뽑고 싶을 때  (0) 2022.07.14
RETURN 0; 값에 대하여  (0) 2010.12.17
    'Coding' 카테고리의 다른 글
    • 파이썬 스니펫(조각코드 모음집, 위키독스)
    • 크롤링 코드 샘플
    • pipreqs - 설치한 라이브러리만 requirements로 뽑고 싶을 때
    • RETURN 0; 값에 대하여
    교 향
    교 향
    AI/ML/DL

    티스토리툴바