C++中如何接收空输入并使用构造函数默认值
解决C++采购申请程序的空输入与默认值问题
问题分析
你的代码中cin>>会跳过所有空白字符(空格、回车、制表符),导致无法捕获空输入;同时只要执行cin>>purchaser或cin>>vendor,就会覆盖默认构造函数设置的初始值,无法保留默认值。以下是针对性的解决方案:
修改后的完整代码
#include <iostream> #include <string> #include <cctype> using namespace std; class Requisition{ private: string purchaser, vendor; // 辅助函数:判断字符串是否全为空白字符 static bool isAllWhitespace(const string& s) { for (char c : s) { if (!isspace(static_cast<unsigned char>(c))) { return false; } } return true; } public: Requisition() :purchaser("ABC Industries"),vendor("XYZ Supplier"){} Requisition(string pname, string vname) :purchaser(pname),vendor(vname){} void getStaffInput(){ string input; cout << "Enter a purchaser name (press Enter to use default): "; getline(cin, input); // 仅当输入非空白时,更新采购商名称 if (!isAllWhitespace(input)) { purchaser = input; } cout << "Enter a vendor name (press Enter to use default): "; getline(cin, input); // 仅当输入非空白时,更新供应商名称 if (!isAllWhitespace(input)) { vendor = input; } } void printHeader(){ cout << "\n********************************************************\nPurchaser: " << purchaser <<"\nVendor: "<<vendor <<"\n********************************************************"<<endl; } }; int main(){ Requisition req; req.getStaffInput(); req.printHeader(); return 0; }
关键修改说明
接收空输入的处理
- 用
getline(cin, input)替代cin>>:getline会读取用户输入的整行内容,包括直接回车产生的空字符串,完美解决无法捕获空输入的问题。
- 用
保留默认值的逻辑
- 新增
isAllWhitespace辅助函数,判断输入是否为空或全是空格、制表符等空白字符。 - 只有当输入包含非空白字符时,才更新
purchaser或vendor成员变量;如果用户直接回车或输入全空格,就保留默认构造函数设置的初始值。
- 新增
测试场景验证
- 直接回车采购商输入:打印时采购商显示默认值"ABC Industries"
- 输入全空格的供应商名称:打印时供应商显示默认值"XYZ Supplier"
- 输入有效名称:打印时显示用户输入的内容
内容的提问来源于stack exchange,提问作者ARCtic
相关产品推荐
相关产品推荐

