C ++程序无法从文件中读取字符

时间:2013-03-13 22:44:32

标签: c++ arrays file loops

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


    }
    }

3 个答案:

答案 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);

应该解决问题。