C++自制函数分享:input

思路

C++自带的输入函数大部分是以换行或空格结尾,如果想做出以下操作,就比较复杂了。 

问题

  1. 算式:
  2. 算式:[用户输入]
  3. 算式:[用户输入]+
  4. 算式:[用户输入]+[用户输入]
  5. 算式:[用户输入]+[用户输入]=答案

        (上例中“[用户输入]”内为用户手动输出,其余为自动弹出的提示)

优点

此函数虽结构不难,但写起来也不容易,一连串的bug和资料,可以为使用者节省许多时间。

要求

此函数已经在c++11测试过,在代码的开头需要添加名为conio.hiostreamstring的头文件和添加std命名空间,代码如下。

# include<conio.h>
# include<iostream>
# include<string>

using namespace std;

使用方法

此函数一共需要三个参数。

参数列表
类型变量描述
stringtip输入的提示,类似于python中input括号中的所填参数,在输入内容前面。
stringfill输入完成后将自动补充,比如上文“问题”栏中第3步补充的“+”,如果为空,则不补充。
charend

结束输入符,一旦用户输入此字符,会立刻停止输入。

此函数是有返回值的。

返回值
类型变量描述
stringtext用户所输入的内容,返回内容中不会包括“end”、回车和退格。

函数代码

string input(string tip = "", string fill = "", char end = ' '){
	/*
	作者:zhuo yue 
	| 类型 |变量|             描述             |
	|string|tip |提示内容,在输入内容前面       |
	|string|fill|输入完成后末尾替换,无则不替换 |
	| char |end |输入完成的标记                | 
	*/ 
	
	// 错误检查
	if (end == '\0'){
		cout << "Error: The parameter \"end\" of the function \"input\" cannot be null" << endl;
		return "";
	} 
	
	// 定义变量 
	string text = "";
	int l = tip.size(); 
	char i = '\0';
	
	// 提示
	cout << tip; 
	
	while (i != end or i != fill[0]){
		// 读取一个字符 
		i = getch();
		
		// 判断输出
		if (i != '\r'){  // 检测回车 
			if (i != '\b'){  // 检测退格 
				if (i != end){  // 检测停止(停止符)
					if (i != fill[0]){  // 检测停止(补充符) 
						// 正常加入和显示 
						text += i;
						
						cout << i; 	
						l++;
					} else {
						cout << i; 	
						l++;
						fill = "";
						break;
					}
				} else {
					cout << " ";
					l++;
					break;
				}
			} else {
				if (l > tip.size()){
					text.pop_back(); 
					cout << "\b  \b\b";
					l--;
				}
			}
		} else {
			cout << " ";
			l++;
			break;
		}
	}
	
	// 末尾字符替换 
	if (fill != ""){
		cout << "\b" << fill;
		l--;
	}
	
	// 返回
	return text; 
}

使用例子

此处我们来完成一下问题中的内容。

// 头文件
# include<iostream>
# include<string> 
# include<conio.h>

using namespace std;

// 函数
string input(string tip = "", string fill = "", char end = ' '){
	/*
	作者:zhuo yue 
	| 类型 |变量|             表述             |
	|string|tip |提示内容,在输入内容前面       |
	|string|fill|输入完成后末尾替换,无则不替换 |
	| char |end |输入完成的标记                | 
	*/ 
	
	// 错误检查
	if (end == '\0'){
		cout << "Error: The parameter \"end\" of the function \"input\" cannot be null" << endl;
		return "";
	} 
	
	// 定义变量 
	string text = "";
	int l = tip.size(); 
	char i = '\0';
	
	// 提示
	cout << tip; 
	
	while (i != end or i != fill[0]){
		// 读取一个字符 
		i = getch();
		
		// 判断输出
		if (i != '\r'){  // 检测回车 
			if (i != '\b'){  // 检测退格 
				if (i != end){  // 检测停止(停止符)
					if (i != fill[0]){  // 检测停止(补充符) 
						// 正常加入和显示 
						text += i;
						
						cout << i; 	
						l++;
					} else {
						cout << i; 	
						l++;
						fill = "";
						break;
					}
				} else {
					cout << " ";
					l++;
					break;
				}
			} else {
				if (l > tip.size()){
					text.pop_back(); 
					cout << "\b  \b\b";
					l--;
				}
			}
		} else {
			cout << " ";
			l++;
			break;
		}
	}
	
	// 末尾字符替换 
	if (fill != ""){
		cout << "\b" << fill;
		l--;
	}
	
	// 返回
	return text; 
}
 

// 主代码
int main(){
	// 定义变量 
	double a, b, ans;
	
	// 输入 
	a = stod(input("算式:", "+"));
	b = stod(input("", "=")); 
	
	// 输出
	ans = a + b;
	cout << ans;
		
	return 0;
}

好了,创作不易,请多多支持。 

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值