숫자를 엔터를 누를때까지 연속으로 입력받기 (한 번씩 봐주시면^^;)

exige의 이미지

#include <stdio.h>
 
int main()
{
	int value;
 
	do {
		scanf("%d", &value);
		printf("%d ", value);
                // value값을 parameter로하는 함수호출부분
	} while (value != '\n');
 
	return 0;
}

위와 같은 코드로 짜고 실행하였습니다.

10 20 30를 친 후 엔터하면 10밖에 출력이 안되더군요.

저는 엔터를 받을 때까지 각각의 값을 다른 함수의 parameter로 보내주고 싶은데요,
(위의 예라면 10, 20, 30이 차례로 들어갑니다)

scanf는 스페이스와 탭, 엔터로 구분을 해서 안된다고 알고 있는데, 혹시 방법이 있는지 궁금합니다.

value변수는 int형(정수형)이기때문에 gets() 등 이런류는 사용이 어려울거라 생각합니다.

출력 시 10 20 30이 차례로 나온다면 가능할 거 같은데.. 어렵네요^^;

C입문자에게 한 수 알려주시면 정말 감사드리겠습니다.

auditory의 이미지

정해진 개수를 받는거라면 간단하지만, scanf("%d %d %d\n")

임의 개수를 받는 것을 스페이스로 구분하려면 그렇게 간단하지는 않을겁니다.

fgets로 한줄을 다 받아서 strtok 로 tokenizing 하셔야합니다.

planetarium의 이미지

while (getc(stdin) == ' ');

조건을 이렇게 해보세요.

그리고 바로 윗 답변... scanf의 포맷에 \n 같은거 넣으면 이상하게 동작할겁니다.
학부 1학년 프로그래밍 실습 시간에 강사님이 VC++ 6.0에서
scanf("%d\n", ...); 라고 해두고 오동작하는 원인을 한참 못찾으셨던게 생각나는군요.

exige의 이미지

덕분에 잘 배웠습니다^^

한줄로 끝나는군요 ㅎㅎ;

나그네나그네의 이미지

이렇게 하면 어떨까요?

scanf("%*[^\n]", string);
while(sscanf(string, "%d", &number) != EOF){
printf("%d ", number);
}

planetarium의 이미지

...??? scanf의 format에 저런 정규표현식이 사용 가능했었나요?
신기해서 한번 테스트해보니 warning: too many arguments for format 가 뜨고, 실행 결과가 이상하네요... gcc 4.1.1입니다.

%s로 바꾼다고 해도 sscanf() 도 seeker가 존재하는게 아니라서 계속 첫 번째 인자만 출력되구요...
코드 답변이기에 실행해보고 올리신줄 알았는데 아닌가봅니다;;

나그네나그네의 이미지

헉.. 죄송합니다 ㅜㅜ 테스트도 안하고 아무 생각없이 올렸더니 저런 일이 일어나네요 ;;

scanf의 경우

scanf("%[^\n]", string);

와 같이 쓰면 \n을 읽을때까지 계속 string에 저장합니다.
같은 방식으로 %[^a]와 같이 하면 글자 중 a가 나올때까지 string으로 집어넣습니다

본문과 같이 %*[^\n]으로 하면 \n을 읽을때까지의 문자열을 무시하는 것이 되는데... 제가 잘못 썼네요 ;;

위의 getc(stdin) != ' '가 답인 듯 하군요..

planetarium의 이미지

오오... 덕분에 신기한거 하나 배웠습니다. 주말에 자세히 한번 알아보고 싶네요... 감사합니다 ^^

최종호의 이미지


프로그램 오류가 재밌게 발생했네요.

아마 값을 10 20 30 이 아니라
30 20 10 이라고 넣으셨으면
30 20 10
이라고 결과가 출력됐을 것입니다.

위와 같은 동작을 보인 것은

while (value != '\n');

부분에서 '\n' 의 값이 10이기 때문입니다.

dfd의 이미지

감사요

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.