将具有多个空格的字符串添加到文本文件

adding string with multiple spaces to a text file

本文关键字:添加 字符串 文本 文件 空格      更新时间:2023-10-16

我在下面有这段代码,我正在向文本文件添加费用,但是当我运行代码时,文件的输入变成了

: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 Expensen";   
 cout << "b) Remove Expensen";
 cout << "c) Edit Cash Flow item for Expense or Incomen";
 cout << "d) Net Cash Flow Summary Reportn";
 cout << "e) Quitn";
 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;
     }
这个问题

的另一个可能的答案

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";

你误用了ignore - 你应该在你真的需要跳到下一行时才使用它。
使用 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
}

(您可能已经注意到,您需要在日期后按两次 Enter 才能继续。第二个是最后ignore正在等待的。

getline s之后删除ignore,并在cin >> choice后添加一个。