C++控制台实时输入输出

Invincible_GG 2014-12-22 11:22:27
在C++控制台中,我要做一个动态输入输出,例如,控制台有两行,第一行是我输入所在,第二行是根据第一行的输入来输出结果,如,我在第一行输入a,经过算法,是1 ,若是输入b,是2,输入ab就是12,现在有,我在第一行输入a,在第二行显示1,但是我还没输完,我要在第一行a之后还要输入b,我输入b(现在已经输入了ab两个),第二行显示12,我在第一行可能还没输完,C++中怎么实时的接受输入的东西(可能用空格什么的),感谢各位解惑!
...全文
2060 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Invincible_GG 2014-12-25
  • 打赏
  • 举报
回复
引用 10 楼 pcradio 的回复:
一个简单的实现,原理就是清屏重新显示,输入太快,清屏会有闪烁:
#include "stdafx.h"
#include <conio.h>
#include <vector>

int main(int argc, char* argv[])
{
	int c;
	std::vector<int> input;
	std::vector<int>::iterator it;
	while(c = getch()) {
		system("cls");
		if(c == 8 && input.size() != 0) {
			input.pop_back();   // backspace
		} 
		else if(c == 8 && input.size() == 0) {
			continue;
		} 
		else {
			input.push_back(c); // general
		}

		// playback
		for (it = input.begin(); it != input.end(); it++) {
			printf("%c", *it);
			if (it == input.end() - 1) printf("\n");
		}
		for (it = input.begin(); it != input.end(); it++) {
			printf("%d", *it);
		}
	}
	return 0;
}
谢谢大哥!
vocanicy 2014-12-24
  • 打赏
  • 举报
回复
引用 3 楼 huaxiarenxiahua 的回复:
可能你们还没理解我的意思,我在输入过程中,输入就会自动显示,比如我输入abcd,当我输入a的时候,第二行就显示1了,但是我还没输完,我在输入a后接着输入b,,第二行会显示12,如果此时我退一格,也就是把b删了,第二行会显示1,举个相仿的例子,就像百度,我输入什么后,下面会自动的显示一些内容吧,重点在实时,不是等输完了才有结果的,这样谁都会
你才是没有理解我说的 其他人给你建议的scanf读取输入的都是需要按回车才能读取到输入内容的 getche/getch却可以实时读取输入按键的函数,可以读取字符、甚至退格、回车等控制字符 你需要做的就是采用一个for循环实现 for(;;) { c = getch(); if(c == 'a') // 在第二行显示1 else if(c == 'b') // 在第二行显示2 else if(c == '\r') break; } 至于在屏幕指定位置输出信息,要使用控制台窗口控制函数 一般编程控制步骤如下: 调用GetStdHandle获取当前的标准输入(STDIN)和标准输出(STDOUT)设备句柄。 然后调用WriteConsoleOutputCharacter将字符显示到屏幕指定坐标的位置 例如, TCHAR ch = '1'; COORD pos = { 5, 10 }; // 在第5行、第10列显示1 WriteConsoleOutputCharacter(hOut, &ch, 1, pos, NULL);
Invincible_GG 2014-12-23
  • 打赏
  • 举报
回复
引用 8 楼 lx624909677 的回复:
就是当你按了退格的时候,调用system("cls");来清屏,然后把你退格后的内容全部从新显示在界面上,看起来的效果就是和百度那种差不多了
能给个具体的例子吗?这个对我来说大有难度,没例子不知道咋做
阿源是少年 2014-12-23
  • 打赏
  • 举报
回复
一个简单的实现,原理就是清屏重新显示,输入太快,清屏会有闪烁:
#include "stdafx.h"
#include <conio.h>
#include <vector>

int main(int argc, char* argv[])
{
	int c;
	std::vector<int> input;
	std::vector<int>::iterator it;
	while(c = getch()) {
		system("cls");
		if(c == 8 && input.size() != 0) {
			input.pop_back();   // backspace
		} 
		else if(c == 8 && input.size() == 0) {
			continue;
		} 
		else {
			input.push_back(c); // general
		}

		// playback
		for (it = input.begin(); it != input.end(); it++) {
			printf("%c", *it);
			if (it == input.end() - 1) printf("\n");
		}
		for (it = input.begin(); it != input.end(); it++) {
			printf("%d", *it);
		}
	}
	return 0;
}
lx624909677 2014-12-22
  • 打赏
  • 举报
回复
so easy while(scanf("%d",&a)!=EOF) { //你要做的事情,比如输出XXXX }
lx624909677 2014-12-22
  • 打赏
  • 举报
回复
就是当你按了退格的时候,调用system("cls");来清屏,然后把你退格后的内容全部从新显示在界面上,看起来的效果就是和百度那种差不多了
Invincible_GG 2014-12-22
  • 打赏
  • 举报
回复
引用 5 楼 lx624909677 的回复:
你想要的是根据你输入内容自动显示部分内容是吧?在控制台这种效果很麻烦,需要你不停的清屏和重新显示
感谢,我想你明白了我的意思了,能麻烦下,给出个小小的例子吗?非常感谢!
Invincible_GG 2014-12-22
  • 打赏
  • 举报
回复
引用 4 楼 CharlesSimonyi 的回复:
用控制台的标准输入输出肯定不好搞,如果可以写成窗体应用程序就方便了,两个文本框,上面输入,响应WM_CHAR消息,下面实时显示结果。非得要控制台窗口那个黑呼呼的窗口的样子的话,也可以用窗体应用程序来模仿一个,在文本框的基础上进行一些处理,设置背景为黑色、文字为白色等。。
谢谢,不过我需要的是控制台的!
lx624909677 2014-12-22
  • 打赏
  • 举报
回复
你想要的是根据你输入内容自动显示部分内容是吧?在控制台这种效果很麻烦,需要你不停的清屏和重新显示
encoderlee 版主 2014-12-22
  • 打赏
  • 举报
回复
用控制台的标准输入输出肯定不好搞,如果可以写成窗体应用程序就方便了,两个文本框,上面输入,响应WM_CHAR消息,下面实时显示结果。非得要控制台窗口那个黑呼呼的窗口的样子的话,也可以用窗体应用程序来模仿一个,在文本框的基础上进行一些处理,设置背景为黑色、文字为白色等。。
Invincible_GG 2014-12-22
  • 打赏
  • 举报
回复
引用 1 楼 lx624909677 的回复:
so easy while(scanf("%d",&a)!=EOF) { //你要做的事情,比如输出XXXX }
引用 2 楼 vocanicy 的回复:
用这个函数_getche可以读取输入字符
可能你们还没理解我的意思,我在输入过程中,输入就会自动显示,比如我输入abcd,当我输入a的时候,第二行就显示1了,但是我还没输完,我在输入a后接着输入b,,第二行会显示12,如果此时我退一格,也就是把b删了,第二行会显示1,举个相仿的例子,就像百度,我输入什么后,下面会自动的显示一些内容吧,重点在实时,不是等输完了才有结果的,这样谁都会
vocanicy 2014-12-22
  • 打赏
  • 举报
回复
用这个函数_getche可以读取输入字符

16,482

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧