Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[표준] 정수 입출력 정의 #12

Open
puzzlet opened this issue Jan 24, 2016 · 4 comments
Open

[표준] 정수 입출력 정의 #12

puzzlet opened this issue Jan 24, 2016 · 4 comments

Comments

@puzzlet
Copy link
Member

puzzlet commented Jan 24, 2016

(ㅂ) ㅇ 받침이 오면 표준 입력에서 정수 문자열을 받아 이에 해당하는 값을 지금 저장공간에 집어넣습니다.
(ㅁ) ㅇ 받침이 오면 뽑아낸 값을 10진수로 출력합니다.

현재 대부분의 구현체에서 은 공백 없이 숫자만 출력하지만 은 숫자가 공백으로 구분되어 있기를 요구합니다.

저는 이걸 표준에 아예 명시를 하는 게 좋다고 생각하는데, 다른 분들의 의견은 어떠신가요.

(aheui/snippets#22 에서 처음 제기된 문제입니다)

@tirr-c
Copy link

tirr-c commented Jan 24, 2016

C의 scanf%d로 정수를 받은 뒤 %c로 문자를 받을 때, 정수 뒤에 따라오는 공백을 포함한 문자를 받습니다. %d가 그 뒤의 공백까지 처리해 주지는 않는 것입니다.

#include <stdio.h>
int main()
{
    int n;
    char c;
    scanf("%d", &n);
    scanf("%c", &c);
    printf("%d %d\n", n, c);
    return 0;
}

를 실행하고, 콘솔에서 3을 치고 엔터를 누르면 3 10이 출력되죠. 전 이걸 생각하고 씨샤희에서 이 정수 뒤 공백을 받지 않도록 구현해 두었습니다.

@youknowone
Copy link
Member

많은 구현체에서 일치하는 동작을 보이고 있으면 바꾸는 편이 나아 보입니다. 표준 개정에 참고할 대표구현체 몇가지를 정해두면 어떨까 싶네요. C의 scanf의 해당 동작은 찾아보면 weird, unpredictable이라는 얘기가 종종 나오는 동작이에요. 다른 예를 들더라도 C의 동작을 참고하지는 않았으면 합니다.

프로그래밍 언어에서 보통은 하나의 동작은 한 가지 일을 일관성 있게 처리할 것을 기대하는데, C의 scanf는 %d다음의 공백을 일관성이 없이 처리합니다. %d가 정말로 정수만 처리하고 그뒤의 공백은 처리하지 않는다면 scanf("%d%d")는 왜 10 20 과 같은 입력을 정상적으로 처리해줄까요? 10b20은 처리해주지 못하는데요. (C가 이런 동작을 넣은 이유는 아희와는 큰 관련이 없을듯합니다)

@tirr-c
Copy link

tirr-c commented Jan 24, 2016

그럼 대부분의 구현체가 따라오는 공백을 함께 입력받으니까, 정수를 입력받을 때

  • 뒤에 공백이 오면 함께 입력받습니다.
  • 공백 외의 문자가 오면 입력받지 않습니다.

로 하면 어떨까요? 또 공백 문자에 해당되는 문자는 무엇인지, 그리고 공백을 하나만 받을지 이어진 공백을 전부 받을지도 확실히 해야 할 것 같습니다.

유니코드 공백 문자 목록 - Wikipedia

@youknowone
Copy link
Member

지금 말씀하신 동작은 충분히 지금 구현과도 부합하고 합리적인 동작이라고 생각됩니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants