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

Invincible_GG 2014-12-22 11:22:27
在C++控制台中,我要做一个动态输入输出,例如,控制台有两行,第一行是我输入所在,第二行是根据第一行的输入来输出结果,如,我在第一行输入a,经过算法,是1 ,若是输入b,是2,输入ab就是12,现在有,我在第一行输入a,在第二行显示1,但是我还没输完,我要在第一行a之后还要输入b,我输入b(现在已经输入了ab两个),第二行显示12,我在第一行可能还没输完,C++中怎么实时的接受输入的东西(可能用空格什么的),感谢各位解惑!
...全文
2067 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可以读取输入字符
目录 1. 简介 怎样使用本教程 2. C++基础 Basics of C++ 1. C++程序结构 Structure of a program 2. 变量和数据类型 Variables and Data types 3. 常量 Constants 4. 操作符/运算符 Operators 5. 控制台交互 Communication through console 3. 控制结构和函数 Control structures and Functions 1. 控制结构 Control Structures 2. 函数I Functions I 3. 函数II Functions II 4. 高级数据类型 Advanced Data 1. 数组 Arrays 2. 字符序列 Character Sequences 3. 指针 Pointers 4. 动态内存分配 Dynamic memory 5. 数据结构 Data Structures 6. 自定义数据类型 User defined data types 5. 面向对象编程 Object-oriented Programming 1. 类,构造函数和析构函数,类的指针 Classes. Constructors and Destructors. Pointers to classes. 2. 操作符重载,this,静态成员 Overloading Operators. this. Static members 3. 类之间的关系 Relationships between classes: friend. Inheritance 4. 虚拟成员,抽象,多态 Virtual Members. Abstraction. Polymorphism 6. C++高级 Advanced concepts 1. 模板 Templates 2. 名空间 Namespaces 3. 出错处理 Exception handling 4. 类型转换高级 Advacned Class Type-casting 5. 预处理指令 Preprocessor Directives 7. C++ 标准函数库 C++ Standard Library 1. 文件的输入输出 Input/Output with files C++基础教程简介 怎样使用本教程 读者范围 本教程面向所有希望学习C++语言的读者。如果读者有其他编程语言背景或计算机相关基本知识可以帮助更好的理解教程内容,但这并非必须条件。 对于C语言熟悉的读者可将前三章(1.1 到 3.4)当作复习,因为这部分内容主要介绍C++中的C部分。不过某些C++的语法与C还是有些差别,所以建议还是快速的读一下这部分。 第四章讲述面向对象编程。 第五章主要介绍ANSI-C++标准中的新增的功能。 本教程结构 教程共分6章,每章分若干小节。你可以直接从主目录进入任意小节,并循每页底部的链接向后浏览。 很多小节含有一页例题介绍该章节主要知识点的使用。建议在进入下一章学习之前最好先阅读这些例题,理解每行代码。 学习和练习一种编程语言的最好办法是自己修改书中例题程序,设法在程序中增加新的功能。不要不敢修改这些例题程序,这正是学习的方法。 兼容性备注 ANSI-C++标准近几年来被接受为国际标准。尽管C++语言从二十世纪80年代即存在,ANSI-C++在1997年才被发表,2003年又被修订过。因此很多编译器不支持ANSI-C++中的部分新功能,特别是那些在此标准发表前即被发布的编译器。 在本教程中,那些ANSI-C++中新增的而老一代C++编译器大多不支持概念将备用如下标志标出: ANSI C++新增的概念 同样对于C和C++在实现上有明显不同的概念,将备用如下标志标出: C 与 C++不同的地方 编译器 本教程中所有例题程序均为console程序(控制台程序)。此类程序以文本形式与用户交换信息,显示结果。 所有C++编译器均支持console程序的编译。要了解更多关于如何编译的说明,请查询你的编译器用户使用手册。 C++编译器和开发环境推荐 很多读者询问编译器和开发环境的问题。除了常用的商用收费的MS Visual Studio, VC++,Borland C++等工具外,还有很多免费的工具也是很好用的。这里推荐两种免费的C++开发软件: 1、Eclipse的CDT开发工具,官方网站在http://www.eclipse.org/cdt/ 2、开源工具Dev-C++和wxDev-C++

16,490

社区成员

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

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

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