C에서 문자 하나만 입력받기

feelsocrazy의 이미지

문자를 딱 한개만 받게 할 수는 없나요???

printf(" I 를 입력하면 입력할 수 있습니다.\n");

while((c = getchar()) != 'I')

{

printf("오류~ 다시 입력하세요 !! : ");

fflush(stdin);

}

대충 이렇게 할려고 하는대요~!!

한 문자 입력해도......버퍼에 \n 이 녀석이 남아서.....오류~!!가 2번 찍히고......

오류! 문구가 한번 찍히게 하고 싶은대요.....그리고 getchar로 한문자가 아니고....3-4문자를 받아들이면

while문이 많이 도는대......한번만 돌게 하면서....오류 문구 찍어내게 하는 방법이 없을까요??

scanf도 써보고.....했는대 안되내요.....ㅠㅠ

getch를 써볼려고 했는대......리눅스에서 짜고 있어서.....그것도 안 써지내요~~~

좀 도와주세요~~ 하루종일 이 것 때매 죽겠내요~~~ㅠㅠ

간단한 소스 예제 좀 들어주세요~

bookgekgom의 이미지

getch() 는 리눅스에서 못쓰는군염 ㅇ.,ㅇ

---------------------------------------------------------------------------------------------------------------
루비 온 레일즈로 만들고 있는 홈페이지 입니다.

http://jihwankim.co.nr

여러 프로그램 소스들이 있습니다.

필요하신분은 받아가세요.

kaeri17의 이미지

확인하고 아니면 ungetchar()로 다시 집어 넣을 수 있습니다

정태영의 이미지

ncurses 를 사용하면 됩니다.

http://wiki.kldp.org/wiki.php/NCURSES-Programming-HOWTO#s-1.2.1

--
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

gamdora의 이미지

fflush로 입력 스트림을 플러시할 수 없습니다.

ncurses 라이브러리리를 쓰시면 getch 함수를 쓸 수 있습니다.

#include <stdio.h>
#include <curses.h>
 
int main(void)
{
        int c;
 
        initscr();
        noecho();
 
        printw("Press 'I' key to enter input mode.\n");
        while ((c = getch()) != 'I')
                printw("ERROR~ Press again!\n");
 
        echo();
        endwin();
 
        return 0;
}

컴파일할 때는 -lncurses 옵션을 붙여주세요.

라스코니의 이미지

gets 를 사용하면 될 것 같은데요.
gets 로 MAX 개수만큼 읽어드린 후 문자의 길이가 strlen() 이 1이 아니면 한문자 이상을 입력한 것이죠.

alwaysrainy의 이미지

요렇게 하는 방법도 있지요 ~

<xmp>
#include <stdio.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <unistd.h>
#include <termios.h>
#include <stdlib.h>
 
static void _SetInputMode ();
static void _ResetInputMode ();
 
struct termios saved_attributes;
 
int main(int argc, char *argv[])
{
   unsigned char ucInputCh;
 
   _SetInputMode ();
   do {
      printf("\r\n input end character : ");
   } while((ucInputCh = getchar()) != 'I');
   _ResetInputMode ();
   printf("\r\n");
 
   return 0;
}
 
static void _ResetInputMode ()
{
  tcsetattr (STDIN_FILENO, TCSANOW, &saved_attributes);
}
 
static void _SetInputMode ()
{
   struct termios tattr;
 
   if (! isatty(STDIN_FILENO) ) {
      fprintf(stderr, "Not a terminal.\n");
      exit(EXIT_FAILURE);
   }
   tcgetattr(STDIN_FILENO, &saved_attributes);
   atexit(_ResetInputMode);
   tcgetattr (STDIN_FILENO, &tattr);
   tattr.c_lflag &= ~ICANON;
   tattr.c_cc[VMIN] |= 0;
   tattr.c_cc[VTIME] = 0;
   tcsetattr (STDIN_FILENO, TCSAFLUSH, &tattr);
}
</xmp>

---------------------------------------
세계는 넓고, 할일은 많다.

---------------------------------------
세계는 넓고, 할일은 많다.

댓글 달기

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