小编典典

与getchar类似的功能

go

是否有类似于C的Go功能,getchar能够处理控制台中的Tab键?我想在控制台应用程序中完成一些工作。


阅读 289

收藏
2020-07-02

共1个答案

小编典典

C的getchar()示例:

#include <stdio.h>
void main()
{
    char ch;
    ch = getchar();
    printf("Input Char Is :%c",ch);
}

等效:

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {

    reader := bufio.NewReader(os.Stdin)
    input, _ := reader.ReadString('\n')

    fmt.Printf("Input Char Is : %v", string([]byte(input)[0]))

    // fmt.Printf("You entered: %v", []byte(input))
}

最后的注释行仅显示当您按下tab第一个元素时,是U + 0009(’CHARACTER TABULATION’)。

但是,由于您的需要(检测选项卡),C
getchar()并不适合,因为它需要用户按Enter键。您需要的是@miku提到的ncurses的getch()/ readline /
jLine之类的东西。有了这些,您实际上可以等待一次击键。

因此,您有多种选择:

  1. 使用ncurses/ readline绑定,例如https://code.google.com/p/goncurses/或类似的https://github.com/nsf/termbox

  2. 自己滚动,请参阅http://play.golang.org/p/plwBIIYiqG作为起点

  3. 用于os.Exec运行stty或jLine。

参考:

https://groups.google.com/forum/?fromgroups=#!topic/golang-
nuts/zhBE5MH4n-Q

https://groups.google.com/forum/?fromgroups=#!topic/golang-
nuts/S9AO_kHktiY

https://groups.google.com/forum/?fromgroups=#!topic/golang-
nuts/icMfYF8wJCk

2020-07-02