C ++文件访问/输入和输出

时间:2013-07-13 17:53:11

标签: c++ file

我在这个程序上遇到了相当困难的时间(见下面的代码)。它应该是:

  1. 创建一个包含26个组件的数组,以对字母表中的26个字母进行字母计数,并为行数创建一个变量。

  2. 创建一个包含文本的ASCII(或文本)文件,并将其用作我程序的输入。

  3. 调用该文件“textinput”,然后将输出存储在名为“textoutput”的文件中。

  4. 谁能告诉我我做错了什么?我一直收到“找不到文件”错误。

    #include <iostream>
    #include <cstdio>
    #include <iomanip>
    #include <cstdlib>
    #include <fstream>
    
    using namespace std;
    
    int main()
    {
    int lineCount = 0;
    int letterCount[26];
    
    for(int i = 0; i < 26; i++)
        letterCount[i] = 0;
    
    ifstream infile;
    infile.open("textinput.txt", ios::in);
    
    if(!infile)
    {
        cerr<<"File does not exist."<<endl;
        exit(1);
    }
    
    ofstream outfile;
    outfile.open("textoutput.txt", ios::out|ios::binary);
    
    if(!outfile)
    {
        cerr<<"File cannot be opened."<<endl;
        exit(1);
    }
    char data[100];
    outfile<<data;
    
    while(infile>>data)
    {
        outfile<<data<<endl;
    }
    
    while(infile)
    {
        char ch1 = infile.get();
        if(ch1 == '\n')
        {
            lineCount++;
            continue;
        }
    
        int asciiNum = (int)ch1;
        if(asciiNum > 96)
        {
            asciiNum = asciiNum - 97;
        }
        else
        {
            asciiNum = asciiNum - 65;
        }
    
        letterCount[asciiNum]++;
    }
    infile.close();
    outfile.close();
    system("PAUSE");
    return 0;
    }
    

3 个答案:

答案 0 :(得分:2)

有趣的是,你的程序无法找到“找不到档案”的错误。 1 因此,我要走出困境并建议你需要确定你的道路是否有资格可执行!

说,你用

之类的东西编译
gcc program1.cpp -o program1

要执行,您必须使用

./program1

因为program1不起作用。原因是99%的确定性,您当前的工作目录不在搜索路径中的可执行文件中(并且您希望保持这种方式)。

除此之外,是的,请确保textinput.txt存在于同一目录中。


1 (程序中没有这样的错误信息。你应该知道:你编程了!)

答案 1 :(得分:1)

ifstream类用于读取文件并从文件中读取您必须先创建的文件,然后首先创建文件。

通过这样做:

  

ifstream infile;

     

infile.open("textinput.txt", ios::in);

您正在尝试从尚未创建的文件中读取,或者可能与其他答案中描述的文件或您的文件不存在于同一目录中的注释相同。

您最好先使用ofstream先写入文件,然后再使用ifstream

答案 2 :(得分:0)

如果您拥有该文件,您的代码是否有效?如果它确实尝试删除ios::out。如果我没有弄错,当您不想截断文件中的旧内容时使用ios::out,但这意味着您已经拥有它。