用c++一次一个地处理每个文本文件中的值
Processing values in each text file one at a time c++
我正在尝试处理两个文本文件中的值。其中一个包含一组字符,另一个则包含一组整数。每个字符在文本文件中各自的位置将相当于一个测试用例。例如,在每个文本文件中读取的第一个值是1个测试用例。然后用这些值来检查可变性,然后在我的代码中用它作为变量。最后打印出一个double。问题是我不知道如何达到测试用例的第二次迭代。我的代码所做的只是读取每个文本文件的第一个值,并打印出我需要的双精度,但仅用于第一个测试用例。当我输入这个时,我想也许在使用完值后删除它们,然后让我的main在for循环中重新运行程序?建议?
#include <iostream>
#include <fstream>
using namespace std;
//function prototypes
char getPackage();
bool vaildPackage(char);
int getHours();
bool validHours(int);
double calculatePakg_A(int);
double calculatePakg_B(int);
double calculatePakg_C(int);
void showBill(double);
int main()
{
char Package = getPackage();
int Hours = getHours();
double bill;
switch (Package)
{
case 'A':bill = calculatePakg_A(Hours);
cout << bill << endl;
break;
case 'B':bill = calculatePakg_B(Hours);
cout << bill << endl;
break;
case 'C':bill = calculatePakg_C(Hours);
cout << bill << endl;
break;
case 'a':bill = calculatePakg_A(Hours);
cout << bill << endl;
break;
case 'b':bill = calculatePakg_B(Hours);
cout << bill << endl;
break;
case 'c':bill = calculatePakg_C(Hours);
cout << bill << endl;
break;
default: cout << "you did not enter a valid Service Plan. n";
break;
}
return 0;
}
char getPackage()
{
ifstream inputFile;
char a;
inputFile.open("Packages.txt");
do
{
inputFile >> a;
} while (! vaildPackage(a));
return a;
}
bool vaildPackage(char a)
{
return a == 'a' || a == 'A'|| a == 'B' || a == 'b'|| a == 'C' || a == 'c';
}
int getHours()
{
ifstream inFile;
int n;
inFile.open("Hours.txt");
do
{
inFile >> n;
} while (! validHours(n));
return n;
}
bool validHours(int n)
{
return n>=0 && n<= 720;
}
double calculatePakg_A(int hrs)
{
if(hrs <=50)
{
return 15.00;
}
else
{
return (hrs-50) * 2.00 + 15;
}
}
double calculatePakg_B(int hrs)
{
if(hrs <=100)
{
return 20.00;
}
else
{
return (hrs-100) * 1.50 + 20.00;
}
}
double calculatePakg_C(int hrs)
{
if(hrs <=150)
{
return 25.00;
}
else
{
return (hrs-150) * 1.00 + 25.00;
}
}
Package.txt
A A B C e C
Hours.txt
50 51 100 101 149 251 750 722
我相信你知道,你可以从一个流中读取多个字段:
ifstream inputFile;
char a;
inputFile.open("Packages.txt");
inputFile >> a;
cout << a << endl;
inputFile >> a;
cout << a << endl;
代码不起作用的原因是,当控件从getPackage()
返回时,变量inputFile
将被删除,因此每次调用该函数时,它都会重新打开文件并从头开始读取。
一种解决方案是使输入流成为静态变量,这样它就不会被删除,而是会从一个调用到下一个调用保持其状态:
char getPackage()
{
static ifstream inputFile("Packages.txt");
char a;
inputFile >> a;
return a;
}
我认为这里唯一的问题是这个。
在函数getPackage()
中
inputFile.open("Packages.txt");
每次调用此函数时,都会打开文件
因此,此函数每次读取第一个条目(仅)。
getHours
函数也有同样的问题。
一种方法是,您可以将文件中的所有条目一次性读取到数据结构中,比如vector,然后在主函数中迭代该vector。
另一种方法是在main函数中打开文件,并在main中引入一个调用这些函数的循环。每次调用它们时,它们都会返回文件中的下一个条目。这需要将打开的文件ifstream &
作为参数传递给函数getHours
和getPackage
- 文本文件中的单词链表
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 如何将内容数组写入文本文件?
- 无法通过空白将文本文件行分隔为矢量
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- C++将文本文件中的数据读取到结构数组中
- 在指针的帮助下,文本文件中单词的频率
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 将值从二维数组输出到文本文件
- 如何在c++中从文本文件中逐行读取整数
- 从文本文件中读取时钟时间和事件时间并进行处理
- 如何从文本文件中读取值和数组
- 如何在C++中确定文本文件中的元素是字符还是数字
- C++试图读取一个文件并输出到另一个文本文件
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 已修改的LinkedList未在文本文件本身中更新
- C++文本文件的获取线
- 为什么C++的文件 I/O 在读取文本文件时忽略初始空行?我怎样才能让它不这样做?
- 打印逐行存储的文本文件
- C++文本文件输入