思路
C++自带的输入函数大部分是以换行或空格结尾,如果想做出以下操作,就比较复杂了。
问题
- 算式:
- 算式:[用户输入]
- 算式:[用户输入]+
- 算式:[用户输入]+[用户输入]
- 算式:[用户输入]+[用户输入]=答案
(上例中“[用户输入]”内为用户手动输出,其余为自动弹出的提示)
优点
此函数虽结构不难,但写起来也不容易,一连串的bug和资料,可以为使用者节省许多时间。
要求
此函数已经在c++11测试过,在代码的开头需要添加名为conio.h、iostream、string的头文件和添加std命名空间,代码如下。
# include<conio.h>
# include<iostream>
# include<string>
using namespace std;
使用方法
此函数一共需要三个参数。
类型 | 变量 | 描述 |
---|---|---|
string | tip | 输入的提示,类似于python中input括号中的所填参数,在输入内容前面。 |
string | fill | 输入完成后将自动补充,比如上文“问题”栏中第3步补充的“+”,如果为空,则不补充。 |
char | end | 结束输入符,一旦用户输入此字符,会立刻停止输入。 |
此函数是有返回值的。
类型 | 变量 | 描述 |
---|---|---|
string | text | 用户所输入的内容,返回内容中不会包括“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;
}
好了,创作不易,请多多支持。