将具有多个空格的字符串添加到文本文件
adding string with multiple spaces to a text file
我在下面有这段代码,我正在向文本文件添加费用,但是当我运行代码时,文件的输入变成了
: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
后添加一个。
相关文章:
- 重载加法运算符(使用函数向对象添加字符串)
- 在不使用内置库函数的情况下添加字符串,我做错了什么?
- 添加字符串和文字(C++)
- 添加字符串类型的类成员会导致调用基类函数而不是子函数
- 添加字符串向量和不同数据类型向量的映射
- 在链接列表中添加字符串的简单方法
- 列表框中的添加字符串 (MFC)
- 添加字符串和文字,顺序如何影响是否可以正确添加字符串
- 向矢量集添加字符串时出现问题<string><>
- 在C++中添加字符串和文字时出现问题
- free():添加字符串时指针无效
- 为什么通过添加字符串文字和char初始化时,为什么不打印字符串
- 矢量尝试添加字符串时会崩溃
- 在数组 C++ 中添加字符串
- 如何添加字符串
- 从向量中删除和添加字符串
- 添加字符串和列表到c++中的映射
- 添加字符串变量后的两个不同的双值
- 为什么我的非所有者绘制的列表框在添加字符串后会出现绘图问题
- 当试图向结构中添加字符串时,程序中断