C++ 向文本文件中添加带多个空格的字符串

C++ 向文本文件中添加带多个空格的字符串,c++,C++,下面有一段代码,我正在为文本文件添加费用,但当我运行代码时,文件的输入变为 :200:25jan 我使用getline(cin,费用);要使整个字符串联机,但结果为空,需要一些帮助吗 #include <cstdlib> #include <iostream> #include <fstream> #include <string> using namespace std; void addExpense(string& expense

下面有一段代码,我正在为文本文件添加费用,但当我运行代码时,文件的输入变为

:200:25jan
我使用getline(cin,费用);要使整个字符串联机,但结果为空,需要一些帮助吗

#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>

using namespace std;
void addExpense(string& expense, double& amount, string& date){ 
cout << "Type of Expense: " << endl;
getline(cin, expense);
cin.clear();
cin.ignore(100, '\n');
cout << "Amount: " << endl;
cin >> amount;
cin.clear();
cin.ignore(100, '\n');
cout << "Transaction Date: " << endl;
getline (cin, date);
cin.clear();
cin.ignore(100, '\n');
}

int main() {
char choice;
bool expenseOn = true;
while (expenseOn != false){
 cout << "a) Add Expense\n";   
 cout << "b) Remove Expense\n";
 cout << "c) Edit Cash Flow item for Expense or Income\n";
 cout << "d) Net Cash Flow Summary Report\n";
 cout << "e) Quit\n";
 cout << "\n";
 cout << "Please Enter a Choice:\n";

 cin.clear ();
 cin >> choice;

 string date = "", expense = "", texpense = "";
 ofstream outfile;
 double amount = 0.0;

switch (choice){
    case 'a':
        cout << "Add Expense.\n";
        //char fileName[20];
        /*cout << "Enter filename.." << endl;
        cin >> fileName;*/ 
        outfile.open ("Expense.txt");
        if (!outfile)
        {
        cout << "File Storing Failed" << endl;
        exit(-1);
        }
        addExpense(expense, amount, date);
        outfile << expense << ":" << amount << ":" << date;
        break;
     }
#包括
#包括
#包括
#包括
使用名称空间std;
作废附加费用(字符串和费用、双倍和金额、字符串和日期){

不能您误用了
忽略
-您应该在真正需要跳到下一行时才使用它。
当您使用
getline
时,您正在从流中提取一整行,包括换行符。
使用
>
时,新行将保留在流中以供以后读取

情况就是这样:

void addExpense(string& expense, double& amount, string& date){ 
    cout << "Type of Expense: " << endl;
    getline(cin, expense);   // Read the newline that was left after reading 'choice'
    cin.clear();
    cin.ignore(100, '\n');   // Read the line containing the type of expense 
    cout << "Amount: " << endl;
    cin >> amount;           // Read the amount
    cin.clear();
    cin.ignore(100, '\n');   // Read to the end of line
    cout << "Transaction Date: " << endl;
    getline (cin, date);     // Read the line containing the date
    cin.clear();
    cin.ignore(100, '\n');   // Read to the end of line
}
void addExpense(字符串和费用、双倍和金额、字符串和日期){

这个问题的另一个可能答案是什么

string expense = "", date = "", type = "";
double amount = 0.0;
ofstream outfile; 
outfile.open ("Expense.txt", std::ios_base::app);
if (!outfile)
{
cout << "File open fail" << endl;
exit(-1);
}
cout << "Please Enter Expense: ";
cin.ignore();
getline(cin, expense);
cin.clear();
cout << "Amount: " << endl;
cin >> amount;      
cin.clear();
cout << "Transaction Date: " << endl;
cin.ignore(100,'\n');
getline (cin, date);
outfile << expense << ":" << amount << ":" << date << "\n";
字符串费用=”,日期=”,类型=”;
双倍金额=0.0;
出流孔的直径;
outfile.open(“Expense.txt”,std::ios\u base::app);
如果(!outfile)
{

您希望得到什么结果?如果稍后关闭或刷新输出文件,您的代码片段将不会显示。可能这就是问题所在。