0

所以,我试图让程序读取一个文件并打印出晴天、阴天和雨天的数量。它只是一直打印 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();


    }
    }
4

3 回答 3

5

这:

while (inputFile >> letter)
{
    cout << letter << endl;  // print out characters read from file 
}  

咀嚼所有的字母,完成后你就在文件的末尾。因此,当您尝试在循环中再次读取数据时for,就没有什么可读取的了。

于 2013-03-13T22:48:42.147 回答
3
"C:\rainorshine.dat"
// ^^

这不是后跟 a 的反斜杠'r',而是回车符的转义序列。您需要使用正斜杠或转义反斜杠本身:

"C:/rainorshine.dat"或者"C:\\rainorshine.dat"

这意味着您永远不会打开文件。你会注意到,如果你的情况是

if (!inputFile) // notice the !
{
    cout << "Error opening data file.\n";

而不是逻辑不正确

if (inputFile) ...
于 2013-03-13T22:57:34.580 回答
1

在这条线之后;

while (inputFile >> letter)
{
    cout << letter << endl;  // print out characters read from file 
}

您需要重新打开文件或回到开头。下次您尝试读取文件时,您已经在最后,所以您什么也得不到。

就像是;

 inputFile.seekg(0, inputFile.beg);

应该解决问题。

于 2013-03-13T22:49:35.283 回答