C - 从大字符串中的标准输入一次读取一个字符

标签 c input formatting

我想一次从标准输入中读取一个字符并对其进行操作。比如输入

abcdefghijklmnopqrstuvwxyz

我想要的是,一旦输入就对a(第一个字符)进行操作(对a的操作应该在用户输入b),然后对b进行操作,依此类推。

最佳答案

也许是其他解决方案。

取自https://www.gnu.org/software/libc/manual/html_node/Noncanon-Example.htmlhttps://ftp.gnu.org/old-gnu/Manuals/glibc-2.2.3/html_chapter/libc_17.html .

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <termios.h>

/* Use this variable to remember original terminal attributes. */

struct termios saved_attributes;

void
reset_input_mode (void)
{
  tcsetattr (STDIN_FILENO, TCSANOW, &saved_attributes);
}

void
set_input_mode (void)
{
  struct termios tattr;
  char *name;

  /* Make sure stdin is a terminal. */
  if (!isatty (STDIN_FILENO))
    {
      fprintf (stderr, "Not a terminal.\n");
      exit (EXIT_FAILURE);
    }

  /* Save the terminal attributes so we can restore them later. */
  tcgetattr (STDIN_FILENO, &saved_attributes);
  atexit (reset_input_mode);

  /* Set the funny terminal modes. */
  tcgetattr (STDIN_FILENO, &tattr);
  tattr.c_lflag &= ~(ICANON|ECHO); /* Clear ICANON and ECHO. */
  tattr.c_cc[VMIN] = 1;
  tattr.c_cc[VTIME] = 0;
  tcsetattr (STDIN_FILENO, TCSAFLUSH, &tattr);
}


int
main (void)
{
  char c;

  set_input_mode ();

  while (1)
    {
      read (STDIN_FILENO, &c, 1);
      if (c == '\004')          /* C-d */
        break;
      else
        putchar (c);
    }

  return EXIT_SUCCESS;
}

关于C - 从大字符串中的标准输入一次读取一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45897744/

相关文章:

javascript - 如果一百万或更多,则使用撇号将数字格式化为 1'000,000.00

无法使用 TMR4、T4CON 等访问定时器 4 pic32

python - 使用用户输入命名列表

克隆命令 `script` 和 PTY 后台作业问题 : terminal messed up

javascript - 通过选中复选框启用多个输入

java - Java 输入缓冲区中的空字符持久性?

string - 如何将字符串从 "lastName, firstName"切换到 "firstName LastName"?

mysql连接问题

连接两个同时进行的 C 程序

c - 有没有办法在 C 中设置文件指针彼此相等?