Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[5740] Re:이차방정식 근 구하는 것인데 수정좀 해주세요..ㅠ.ㅜ
최철호 [ciciro] 2033 읽음    2006-07-10 18:01
scanf() 중에서 마지막에 있는

     scanf("%c",&E);

를 하신 다음, 변수 E에 들어있는 내용은 보면 개행문자('\n')이 있을 겁니다.
앞에서 세 번 호출한 scanf(), 즉

     scanf(%f",&a);
     scanf(%f",&b);
     scanf(%f",&c);

에서 마지막 c 를 입력하면서 친 Enter 가 남아있다가

     scanf("%c",&E);

에 반응한 것입니다. 마지막으로 입력한 Enter를 무효화하기 위해서

     scanf("%c",&E);
     scanf("%c",&E);

와 같이 두 번 연이어 써 버리면, 처음 scanf()는 앞서 입력된 Enter를 받아들이고,
뒤에 scamf()가 사용자의 입력을 기다릴 겁니다.

그리고, 실행해보니 약간 오류가 있어서 마저 말씀드립니다.
허근을 가지는 경우에

       w=x/(2*a);

는 아래와 같이

       w=sqrt(-x)/(2*a);

로 고쳐야 하겠고요. scanf("%c",&E) 다음에 있는

      if (E=='Y'||E=='y') break;

는 아래와 같이 고쳐야 할 것 같습니다.

      if (E=='N'||E=='n') break;

(사족) : 사실 저는 scanf()의 여러 가지 특성 때문에 scanf()를 잘 사용하지는 않습니다.
            scanf() 보다는 좀 복잡하지만, 다른 방법들도 있습니다. 예를 들어 마지막에
            계속할 것인지 묻는 부분에 아래와 같이 하실 수도 있습디다.
             아래는 제가 사용하는 방법입니다. 더 좋은 방법이 많이 있을 겁니다.
             (사실 아래의 방법이 ansi.c 의 일부인지 좀 헤깔리네요.)

            아래에서 getch() 함수는 한 개의 문자를 콘솔(키보드)에서 받아 들이는 함수이고,
            키보드에서 화살표나 F9 같이 일반문자가 아닌 키가 입력되면, 처음에는 0을 반환하고,
            그 다음 번에 그 키에 대한 코드를 반환합니다. (따라서, 그 코드 값을 알면 화살표 등의
            키 중에서도 어느 키가 눌러졌나 알 수 있습니다. - 다른 함수들도 있습니다) 그리고,
            눌러진 키를 화면에 표시하지 않습니다. 필요하다면 프로그래머가 표시해야 합니다.
            (암호를 입력받을 때 등에 유용하겠지요)
            헤더파일중 conio.h 를 include 해야 합니다.


            ===  님이 하신 부분 ===

                  printf("계속 하시겠습니까? (Y/N)");
                   scanf("%c",&E);
                   if (E=='Y'||E=='y') break;
                   else
                   ;


            ===  제가 한 부분 ===

                  printf("계속 하시겠습니까? (Y/N) : ");
   
                  /* 'Y', 'y', 'N', 'n' 중 하나가 입력될 때까지 반복합니다.
                      화살표 등의 키가 입력되면 한 번 더 호출하여 그 다음 입력값을 건너뜁니다. */
                  while((E = getch()) != 'Y' && E != 'y' && E != 'N' && E != 'n')
                      if(E == '\0') getch();

                  if(E == 'Y' || E == 'y') putchar('Y');
                  else {putchar('N'); break;}

+ -

관련 글 리스트
5739 이차방정식 근 구하는 것인데 수정좀 해주세요..ㅠ.ㅜ ANSI C 왕초보 2436 2006/07/10
5740     Re:이차방정식 근 구하는 것인데 수정좀 해주세요..ㅠ.ㅜ 최철호 2033 2006/07/10
5744         정말 감사합니다..ㅜ.ㅡ 군납용품 1907 2006/07/11
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.