所以,我正试图让程序读取文件并打印出晴天,阴天和下雨天的数量。它只是保持打印0.我缺少什么?我试图将文件从.dat更改为.txt但仍然是相同的结果。这是数据文件中的内容:
RRCSSSCSCRRRCSSSCSSRSCCRCRRCSS SSSCCSSSCCSSSCCSSSCRCRCCSSSSSS SSSSCSSSCSSSCRRCCCSSSSSCSSSSCS
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;
int main()
{
const int MONTH = 3;
const int DAY = 30;
char name[MONTH][DAY] = {"June", "July", "August"};
char rain = 'R';
char sun = 'S';
char cloud = 'C';
char letter;
int day = 0;
int count = 0;
int rainy = 0;
int cloudy = 0;
int sunny = 0;
ifstream inputFile;
cout << " Weather for Summer Months\n";
cout << "--------------------\n\n";
inputFile.open("C:\rainorshine.dat");
if (inputFile)
{
cout << "Error opening data file.\n";
system("pause");
}
else
{ cout << "Weather Report\n\n";
while (inputFile >> letter)
{
cout << letter << endl; // print out characters read from file
}
for (count = 0; count < MONTH; count++)
{
for (day = 0; day < DAY; day++)
{
cout << name[count][day];
inputFile >> name[count][day];
if (name[count][day] == 'R')
rainy++;
else if (name[count][day] == 'S')
sunny++;
else if (name[count][day] == 'C')
cloudy++;
}
cout << endl;
cout << " Sunny Days Total: " << rainy << endl;
cout << " Rainy Days Total: " << sunny << endl;
cout << " Cloudy Days Total: " << cloudy << endl << endl;
}
system("pause");
return 0;
inputFile.close();
}
}
答案 0 :(得分:5)
此:
while (inputFile >> letter)
{
cout << letter << endl; // print out characters read from file
}
通过所有字母,当它完成时,你就在文件的末尾。
因此,当您尝试在for
循环中再次读取数据时,没有什么可读的。
答案 1 :(得分:3)
"C:\rainorshine.dat"
// ^^
这不是后跟'r'
的反斜杠,它是回车符的转义序列。您需要使用正斜杠或转义反斜杠本身:
"C:/rainorshine.dat"
或"C:\\rainorshine.dat"
这意味着您永远不会打开文件。你会注意到,如果你的病情是
if (!inputFile) // notice the !
{
cout << "Error opening data file.\n";
而不是逻辑错误
if (inputFile) ...
答案 2 :(得分:1)
在这一行之后;
while (inputFile >> letter)
{
cout << letter << endl; // print out characters read from file
}
您需要重新打开文件或寻找回头。下次你尝试阅读文件时,你已经到了最后,所以你什么也得不到。
喜欢的东西;
inputFile.seekg(0, inputFile.beg);
应该解决问题。