0

それで、プログラムにファイルを読み取らせて、晴れ、曇り、雨の日の数を出力させようとしています。0 を出力し続けるだけです。何が欠けていますか? ファイルを .dat から .txt に変更しようとしましたが、結果は同じです。データファイルの内容は次のとおりです。

RRCSSSCSCCRRRCSSSCSSRSCCRCRRCSSSSSCCSSSCCSSSCCSSSCRCRCCSSSSSSSSSSCSSSCSSSCRRCCCSSSSSCSSSSCS

  #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"
// ^^

これはバックスラッシュの後に が続くものではなく、'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 に答える