c语言,visual c++ 怎么让输出的值保持一个位置不停地更新,而不是一个占一格的printf出来?

进度条那样1%,然后变成了2%...这样一直到100%。
而不是像for(i=0;i<10;i++) 结果出来0,1,2,...9这样的。

移动光标啊! 每次输出使光标退回来,然后下一次输出覆盖前一次的输出就行了!上面的那种方法太*****, 悲催。 你直接调用一个API吧光标移动一下,这种方法可以修改控制台输出的内容!

或者还有一种方法:

你的程序显示 60 % 肯定是在同一行,那么每次输出 **%的时候 在字符串后面加上 \r , 然后下一次输出的时候在把这行重新输出一遍就可以了。追问

对,不过该怎么做?
我刚学这个,不太会,求指教

追答

API:
SetConsoleCursorPosition(COORD pos);

功能: 移动光标到指定位置.

参数COORD是一个结构体:

struct COORD {
int x, y;

}; 这里的x 和 y 可以理解为x坐标和y坐标,不过单位是字符. 也就是说屏幕左上角第一个可输出内容的区域的坐标为 (0, 0);

比如我要移动光标到第二行第二列(假定此处已经有输出的内容):
COORD pos = { 1, 1};
SetConsoleCursorPosition(pos);
printf("A"); // 用字符A替换掉第二行第二列的字符

记住了 ,这个只能使用支持WINDOWS的编译器啊!比如VC DEV 什么的

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-06-02

看了许久才明白楼主的意思,在控制台的程序么,你可以试着敲足足够的换行,使得换一次就到达第二页,看上去位置还在原来的地方。

也就是printf("\n");多写几个啦。希望对你有帮助

/* Note:Your choice is C IDE */
#include "stdio.h"
#include "windows.h"
//填充屏幕
//row 行数
void FillScreen(int row);
void main()
{
 int i=0;
 while(1)
 {
  printf("count:%d",i++);
  FillScreen(24);
  //系统延时1S
  Sleep(1000);
 }
}
void FillScreen(int row)
{
 int i;
 for(i=0;i<row;i++)
 printf("\n");
}

写了个Demo,你看看是不是想要的

追问

嗯,不不不,这样太浪费屏幕了,而却不是很简洁。
我知道怎么办了。
知道在\r,再配合Sleep就可以了。
不过还是多谢你

第2个回答  2013-06-02
利用退格键啊,printf("\b%d",i)
第3个回答  2018-07-03
采纳的描述太麻烦,听我的,头文件加#include<cstdio>,用printf(" “这里是你要输出的东西” \r");
精髓:printf内活用\r
解决不了你的问题我吃屎

求教:在c++中如何用类实现一个简单的单向链表??
将链表中各结点的数据依次输出.这个问题比较容易处理.首先要知道链表头元素的地址,也就是要知道head的值.然后设一个指针变量p,先指向第一个结点,输出p所指的结点,然后使p后移一个结点,再输出.直到链表的尾结点.「例10.8]写出输出链表的函数print. void print(head)struct student *head;{struct student *p;print...

有一个线性表(a1,a2,...,an),采用带头结点的单链表L存储.设计一算法将...
define FALSE 0 define MAXSIZE 20 \/* 存储空间初始分配量 *\/ typedef int Status;\/* Status是函数的类型,其值是函数结果状态代码,如OK等 *\/typedef int ElemType;\/* ElemType类型根据实际情况而定,这里假设为int *\/ Status visit(ElemType c){ printf("%d ",c);return OK;} typedef struct ...

相似回答