GO语言学习笔记1-输入带空格的字符串
最近开始学习GO语言并做了一些编程练习。有道题要输入带空格的字符串这在C/C中很容易实现但GO中好像并不那么容易。学过C/C的可能都知道在C中可以使用gets()函数在C可以使用getline()函数来实现输入带空格的字符串。那我们可能要问在GO中有没有类似的函数答案是否定的。文章目录1.使用fmt包里的Scan_或Sscan_系列函数输入1.1 Scan()函数原型为1.2 Scanln()函数原型为1.3 Scanf()函数原型为1.4 Sscanf()函数原型为1.5 Scan与Scanln方法的区别2.使用bufio包里带缓冲的Reader实现带空格字符串的输入2.1 bufio.NewReader()函数原型为2.2 RearString()函数原型为3.总结在GO中除了fmt和os包我们还可以使用bufio来实现带缓存输入和输出。我们要怎样读取用户从键盘控制台输入的数据输入是指从键盘或其它标准输入os.Stdin读取数据。1.使用fmt包里的Scan_或Sscan_系列函数输入packagemainimportfmtvar(firstName,lastNamestringstr1,str2,str3stringnumintstrWe / love / Go / 1314format%s / %s / %s / %d)funcmain(){fmt.Println(Please input your full name: )// 使用Scan输入fmt.Scan(firstName,lastName)fmt.Printf(Hi %s %s!\n,firstName,lastName)fmt.Println(Please again input your full name: )// 使用Scanln输入fmt.Scanln(firstName,lastName)fmt.Printf(Hi %s %s!\n,firstName,lastName)fmt.Println(Please again input your full name: )// 使用Scanf输入fmt.Scanf(%s %s,firstName,lastName)fmt.Printf(Hi %s %s!\n,firstName,lastName)fmt.Println(From the str we read: )// 使用Sscanf读取fmt.Sscanf(str,format,str1,str2,str3,num)fmt.Println(str1,str2,str3,num)}输入为xiao hua xiao ming xiao hong输出为Please input your full name:xiao hua Hi xiao hua!Please again input your full name:xiao ming Hi xiao ming!Please again input your full name:xiao hong Hi xiao hong!From the str we read:We love Go13141.1 Scan()函数原型为funcScan(a...interface{})(nint,errerror){returnFscan(os.Stdin,a...)}Scan从标准输入扫描文本将成功读取的空白分隔的值保存进成功传递给本函数的参数。换行视为空白。返回成功扫描的条目个数和遇到的任何错误。如果读取的条目比提供的参数少会返回一个错误报告原因。1.2 Scanln()函数原型为funcScanln(a...interface{})(nint,errerror){returnFscanln(os.Stdin,a...)}Scanln类似于Scan但会在换行符处停止扫描在最后一个条目后必须有换行符或EOF。1.3 Scanf()函数原型为funcScanf(formatstring,a...interface{})(nint,errerror){returnFscanf(os.Stdin,format,a...)}Scanf从标准输入扫描文本根据format参数指定的格式将成功读取的空白分隔的值保存进成功传递给本函数的参数。返回成功扫描的条目个数和遇到的任何错误。输入中的换行符必须与格式中的换行符匹配。1.4 Sscanf()函数原型为funcSscanf(strstring,formatstring,a...interface{})(nint,errerror){returnFscanf((*stringReader)(str),format,a...)}Sscanf从字符串str扫描文本根据format参数指定的格式将成功读取的空白分隔的值保存进成功传递给本函数的参数。返回成功扫描的条目个数和遇到的任何错误。输入中的换行符必须与格式中的换行符匹配。1.5 Scan与Scanln方法的区别Scan函数会识别空格左右的内容哪怕换行符存在也不会影响Scan对内容的获取。Scanln函数会识别空格左右的内容但是一旦遇到换行符就会立即结束不论后续还是否存在需要输入的内容。2.使用bufio包里带缓冲的Reader实现带空格字符串的输入packagemainimport(bufiofmtos)//var inputReader *bufio.Reader//var input string//var err errorfuncmain(){inputReader:bufio.NewReader(os.Stdin)// 使用了自动类型推导不需要var关键字声明//inputReader bufio.NewReader(os.Stdin)fmt.Println(Please input your name: )//input, err inputReader.ReadString(\n)input,err:inputReader.ReadString(\n)iferrnil{fmt.Printf(Your name is: %s\n,input)}}输入为xiao hua输出为Please input your name:xiao hua Your name is:xiao hua上例中inputReader是个指针它指向一个bufio类的Reader,然后在main函数里通过bufio.NewReader(os.Stdin)创建了一个buffer Reader并联接到inputReader这个变量。2.1 bufio.NewReader()函数原型为funcNewReader(rd io.Reader)*Reader{returnNewReaderSize(rd,defaultBufSize)}任何符合io.Reader接口的对象法都可以作为bufio.NewReader()里的参数并返回一个新的带缓冲的io.Readeros.Stdin符合这个条件。这个带缓冲的Reader有一个方法ReadString(delim byte), 这个方法会一直读数据直到遇到了指定的终止符(delim byte)才结束输入终止符将成为输入的一部分一起放到buffer里。2.2 RearString()函数原型为func(b*Reader)ReadString(delimbyte)(string,error){bytes,err:b.ReadBytes(delim)returnstring(bytes),err}ReadString返回值是读到的字符串及nil。如果在读到结束时没有发现指定的结束符(delim byte)将返回一个 err ! nil。在上面的例子中我们从键盘输入直到键入“\n”才结束。屏幕是标准输出os.Stdout错误信息被写到os.Stderr。大多情况下os.Stderr等同os.Stdout。一般情况下在GO的代码里省略了变量声明而直接使用”:“进行自动类型推导如inputReader:bufio.NewReader(os.Stdin)input,err:inputReader.ReadString(\n)3.总结GO中Scan_或Sscan_系列函数与C中的scan_系统函数的用法相似学过C的人可以很快学会这些函数的使用。但要实现带空格字符串的输入则要使用bufio包里带缓冲的Reader和os包里的os.Stdin。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2583069.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!