【问题标题】:C++ Program Not Reading Characters from FileC++ 程序不从文件中读取字符
【发布时间】:2013-03-13 22:44:32
【问题描述】:

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


    }
    }

【问题讨论】:

  • 您需要在 inputFile.open 中转义反斜杠 ...
  • if (inputFile) { /* error */ } 这种情况似乎与您想要的相反。

标签: c++ arrays file loops


【解决方案1】:

这个:

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

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

【讨论】:

  • 我添加了该行以查看文件是否正在读取每个字符,但事实并非如此 - 即使我删除了该循环,输出仍然是 0
  • @Anna 当我删除系统上的循环时,它可以工作(尽管我修改了您的程序以使用cin 而不是文件输入)。阅读您的问题下方由 Shmil 和 jrok 撰写的 cmets,了解如何解决您的文件问题。
【解决方案2】:
"C:\rainorshine.dat"
// ^^

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

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

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

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

而不是逻辑不正确

if (inputFile) ...

【讨论】:

  • 谢谢!我知道我错过了什么
【解决方案3】:

在这一行之后;

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

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

类似的东西;

 inputFile.seekg(0, inputFile.beg);

应该能解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-21
    • 2012-02-04
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 2014-06-06
    相关资源
    最近更新 更多