정말 수준 낮은 질문인데요...

익명 사용자의 이미지

#include <turboc.h> // 사칙연산기
 
int main()
{
 
    int a, b, c;
    char cal;
 
    for (;;) {
        printf("계산을 할 수를 입력하세요.(단 정수만 가능)\n");
        printf("첫번째 수 : ");
        scanf("%d", &a);
        printf("두번째 수 : ");
        scanf("%d", &b);
 
        printf("연산자를 입력해주세요.\n");
        printf("※ 가능한 연산자 : +,-,*,/\n"); 
        scanf("%c", &cal);
 
        switch (cal) {     
 
            case '+':
            c = a + b;
            break;
 
            case '-':
            c = a - b;
            break;
 
            case '*':
            c = a * b;
            break;
 
            case '/':
            c = a / b;
            break;
        }
        printf("%d %c %d = %d 입니다.\n", a, cal, b, c); 
    }
}
 

이걸 컴파일 해서 실행시키면

연산자를 입력받는 부분부터 이상하게 되더라구요.

잘못된 부분이 어딘지 도저히 모르겠습니다.

무지렁이 하나 구해주신다고 생각하시고 알려주시면 감사하겠습니다.

kgcrom의 이미지

cal을 받기전에 getchar하셔요.
구글에 "scanf 개행"이라고 검색하시면 왜 그런지 알수잇습니다

흘러가고있는 지금 이 시간에 충실하자.

익명 사용자의 이미지

scanf("%c", &cal);을

cal = getchar();로 바꾸어도 실행 결과는 동일한데요.

좀 더 구체적으로 실행 결과를 말씀드리면

두번째 숫자 입력후

연산자 입력을 받지 않고

첫번째 숫자가 출력되고 루프로 넘어갑니다.

이거 어떻게 해결 하죠?

김정균의 이미지

구글 검색을 해 보셨으면 이해하셨을텐데요. scanf가 개행(\n)을 읽어들이기 때문에 b의 값에는 숫자가 들어간 것이 아니라 개행이 들어가 있다는 의미입니다. 그러니 cal에는 b에 들어가야 할 값이 들어가는 거죠.
그래서 위의 분의 답변은 scanf를 getchar로 변경하라는 것이 아니라 scanf를 한 후에, getchar로 개행을 읽어줘야 님의 루틴이 정상적으로 작동한다는 것을 의미합니다.

그래서 다음과 같이 만들 수도 있습니다.

retry:
    char s[1024] = { 0, };
    printf("계산을 할 식을 입력하세요. (단 정수만 가능)\n");
    if ( fgets (s, 1023, stdin) == NULL ) {
        printf ("식이 올바르지 않습니다. 다시 입력 하세요\n");
        goto retry;
    }
 
    sscanf (s, "%d %c %d", &a, &cal, &b);

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.