鱼C论坛

 找回密码
 立即注册
查看: 2139|回复: 8

[已解决]关于退格(\b)和回车(\r)的一些问题

[复制链接]
发表于 2020-6-8 16:17:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 liuzhengyuan 于 2020-6-20 14:21 编辑

我知道退格可以退一格
回车可以回到行首
但是请问怎么样才能回到上一行呢?
最佳答案
2020-6-15 16:56:11
定义光标位置。win有不少系统函数,其中就可以定义光标位置。先得到标准输出句柄,再获取光标。定位光标。总之很麻烦。当初我有笔记。给你查查:
#include<windows.h>
首先定义一个句柄:
HANDLE h;
获取标准输出句柄:
h=GetStdHandle(STD_OUTPUT_HANDLE);
获取屏幕坐标:
COORD pos;
输入光标位置:
cin>>pos.X;
cin>>pos.Y;
设置控制台光标位置:
SetConsoleCursorPosition(h,pos);
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-6-8 16:46:42 | 显示全部楼层
在python的交互界面以及字符界面运行的代码,在输出一行换行后是没办法把光标移动到上一行的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-8 16:48:00 | 显示全部楼层
txxcat 发表于 2020-6-8 16:46
在python的交互界面以及字符界面运行的代码,在输出一行换行后是没办法把光标移动到上一行的。

C++......
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-8 16:56:40 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-14 15:39:17 | 显示全部楼层
没人吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-15 16:56:11 | 显示全部楼层    本楼为最佳答案   
定义光标位置。win有不少系统函数,其中就可以定义光标位置。先得到标准输出句柄,再获取光标。定位光标。总之很麻烦。当初我有笔记。给你查查:
#include<windows.h>
首先定义一个句柄:
HANDLE h;
获取标准输出句柄:
h=GetStdHandle(STD_OUTPUT_HANDLE);
获取屏幕坐标:
COORD pos;
输入光标位置:
cin>>pos.X;
cin>>pos.Y;
设置控制台光标位置:
SetConsoleCursorPosition(h,pos);
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-16 11:08:30 | 显示全部楼层
在 *nix terminal 中
  1. \x1b[%dA
复制代码
表示向上 %d 行

https://www.man7.org/linux/man-pages/man4/console_codes.4.html

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
liuzhengyuan + 5 + 5 + 3 感谢回答

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-16 11:23:08 | 显示全部楼层
  1. package main

  2. import (
  3.         "fmt"
  4.         "strings"
  5.         "time"

  6.         "github.com/morikuni/aec"
  7. )

  8. func main() {
  9.         const n = 20
  10.         builder := aec.EmptyBuilder

  11.         up2 := aec.Up(2)
  12.         col := aec.Column(n + 2)
  13.         bar := aec.Color8BitF(aec.NewRGB8Bit(64, 255, 64))
  14.         label := builder.LightRedF().Underline().With(col).Right(1).ANSI

  15.         // for up2
  16.         fmt.Println()
  17.         fmt.Println()

  18.         for i := 0; i <= n; i++ {
  19.                 fmt.Print(up2)
  20.                 fmt.Println(label.Apply(fmt.Sprint(i, "/", n)))
  21.                 fmt.Print("[")
  22.                 fmt.Print(bar.Apply(strings.Repeat("=", i)))
  23.                 fmt.Println(col.Apply("]"))
  24.                 time.Sleep(100 * time.Millisecond)
  25.         }
  26. }
复制代码

原理是一样的,找了一个 go 的三方库

ezgif.com-video-to-gif.gif
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-16 11:45:45 | 显示全部楼层
  1. #include <unistd.h>
  2. #include <stdio.h>

  3. void up(int lines) {
  4.     if (lines > 0) {
  5.         printf("\x1b[%dA", lines);
  6.     }
  7. }

  8. void column(int col, const char *str) {
  9.     if (col >= 0) {
  10.         printf("\x1b[%dG%s\x1b[0m", col, str);
  11.     }
  12. }

  13. int main() {
  14.     int n = 20;
  15.     printf("\n\n");
  16.     for (int i = 0; i <= n; i++) {
  17.         up(2);
  18.         char buf[20] = {0};
  19.         sprintf(buf, "%d/%d\n", i, n);
  20.         column(n, buf);
  21.         printf("[");
  22.         for (int j = 0; j <= i; j++) {
  23.             printf("=");
  24.         }
  25.         column(n + 2, "]");
  26.         printf("\n");
  27.         sleep(1);
  28.     }
  29.     return 0;
  30. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-7 21:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表