赞
踩
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;
- }
好了,创作不易,请多多支持。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。