C ++:在函数中使用argv [1]读取.txt文件时出错

时间:2016-12-17 16:49:49

标签: c++ function file arguments

我目前正在使用C ++并尝试创建一个函数,可以打开.txt文件,读取它,并将其保存在数组中(每个单词都是一个蛋白质序列)。 不幸的是,我没有成功调用函数中包含文件名(// Librairies #include <iostream> #include <string> #include <fstream> // Alias using std::cout; using std::endl; using std::string; )的参数。 任何人都能发现我的代码中的错误或我实现的方式吗? 在此先感谢您,您将找到以下代码和错误消息:

所以这里是我的图书馆和快捷方式&#39;。

argv[1]

功能

现在这是函数,请注意filename应该是一个包含string SequenceChoice(int n, string filename); // Function returning a string std::ifstream sequenceFile (filename); //Opens the file specified on execution if ( sequenceFile.is_open() ) { cout<<"File opened"<<endl; string tmp; int i = 0; while( sequenceFile >> tmp ) // Counts the number of sequences (words) { i++; } string allchains[i]; // Creates an array of strings, to save all the words sequenceFile.clear(); sequenceFile.seekg(0, sequenceFile.beg); // Replaces the cursor at the beginning of the file i=0; while( sequenceFile >> allchains[i]) // Saves each word as a string in an array { cout << allchains[i] << tmp; i++; } sequenceFile.close(); cout<< "File closed"<<endl; } else { cout << "Error: Cannot open file" << endl; } return allchains[n]; // returns the 'n'th word (n being specified when calling the function // end of the function 的字符串(执行时指定的.txt文件的名称):

string filename = argv[1]

主要

现在是主要功能,我不确定是否有效argv[1],但是当我保持这一步而不是将SequenceChoice()作为我的{{1}的参数时,我得到的错误更少功能。

int main(int argc, char *argv[]) {

    if(argc >= 2) 
    {
        string filename = argv[1];
        cout << SequenceChoice( 2, filename ) << endl; // I expect it to give me the 3rd word of a .txt file for example.
    }
    else
    {
        cout << "Error : No file" << endl; 
    }


    return 0;
}

我收到的错误消息

Error message

上面的链接是我编译时收到的错误消息的图片,我已经在互联网上搜索了几个小时如何解决这个问题,遗憾的是我无法让代码正常工作。可能是我处理argv []的类型错误,但我没有解决它,所以任何帮助和评论都会非常感激。

4 个答案:

答案 0 :(得分:3)

请尝试更改以下行

string SequenceChoice(int n, string filename); // Function returning a string

string SequenceChoice(int n, string filename) { // Function returning a string

你正在尝试写一个函数但是;正在终止你的功能,身体没有开始。它应该工作。另外请仔细阅读一本书。

This page列出了适合所有经验水平的优秀书籍。

答案 1 :(得分:0)

试试这个:

string SequenceChoice(int n, string filename)
{ 
    std::ifstream sequenceFile (filename);   //Opens the file specified on execution

    if ( sequenceFile.is_open() )
    {
        cout<<"File opened"<<endl;

        string tmp;
        int i = 0;

        while( sequenceFile >> tmp )    // Counts the number of sequences (words)
        {
            i++; 
        }

        string allchains[i];   //  Creates an array of strings, to save all the words

        sequenceFile.clear();                   
        sequenceFile.seekg(0, sequenceFile.beg);  // Replaces the cursor at the beginning of the file
        i=0;

        while( sequenceFile >> allchains[i]) // Saves each word as a string in an array
        {
            cout << allchains[i] << tmp;    
            i++;
        }   

        ifs.close();
        cout<< "File closed"<<endl;
    }

    else
    {
        cout << "Error: Cannot open file" << endl;
    }

    return allchains[n]; 
} 

答案 2 :(得分:0)

这是功能齐全的代码: 你可以把它与你的比较。

#include <iostream>
#include <fstream>
#include <string>
using namespace std;


string SequenceChoice(int n, string filename){ // Function returning a string

    std::ifstream sequenceFile (filename);   //Opens the file specified on execution

    if ( sequenceFile.is_open() )
    {
        cout<<"File opened"<<endl;

        string tmp;
        int i = 0;

        while( sequenceFile >> tmp )    // Counts the number of sequences (words)
        {
            i++;
        }

        string allchains[i];   //  Creates an array of strings, to save all the words

        sequenceFile.clear();
        sequenceFile.seekg(0, sequenceFile.beg);  // Replaces the cursor at the beginning of the file
        i=0;

        while( sequenceFile >> allchains[i]) // Saves each word as a string in an array
        {
            cout << allchains[i] << tmp;
            i++;
        }

        sequenceFile.close();
        cout<< "File closed"<<endl;

        return allchains[n];            // returns the 'n'th word (n being specified when calling the function

    }

    else
    {
        cout << "Error: Cannot open file" << endl;
    }

    return NULL;


// end of the function
}


int main(int argc, char *argv[])
{
    if(argc >= 2)
        {
            string filename = argv[1];
            cout << SequenceChoice( 2, filename ) << endl; // I expect it to give me the 3rd word of a .txt file for example.
        }
        else
        {
            cout << "Error : No file" << endl;
        }

}

答案 3 :(得分:0)

感谢您的回答,我设法解决了我的问题,除了代码中的一些语法错误,函数中的参数filename是一个字符串,而argv[]是一个指针数组。所以它只是无法将它们视为相同的类型。

以下是该功能的工作版本,可以提供帮助:

string SequenceChoice(int n, char* argv[])
    { 

    std::ifstream sequenceFile (argv[1]);   //Opens the file specified on execution

    if ( sequenceFile.is_open() )
    {
        cout<< " .File opened. \n" <<endl;
        string tmp;
        int i = 0;

        while( sequenceFile >> tmp )    // Counts the number of sequences (words)
        {
            i++; 
        }
        cout << "  " << i << " chains in the .txt file : \n" << endl;
        string allchains[i];   //  Creates an array of strings, to save all the words

        sequenceFile.clear();                   
        sequenceFile.seekg(0, sequenceFile.beg);  // Replaces the cursor at the beginning of the file
        i=0;

        while( sequenceFile >> allchains[i]) // Saves each word as a string in an array
        {
            cout << "  --- Chain "<< i + 1 << " ---  :  " << allchains[i] << endl;    
            i++;
        }   

        sequenceFile.close();
        cout << "\n .File closed. \n" << endl;
        return allchains[n];
    }

    else
    {
        cout << "Error: Cannot open file" << endl;
        return NULL;
    }  
}

最后是新的主要功能:

int main(int argc, char *argv[]) {

    if(argc >= 2) 
    {
        string filename = argv[1];
        cout << SequenceChoice( 2, argv ) << endl; // Shows the 3rd word of the file, as an example.
    }
    else
    {
        cout << "Error : No file" << endl; 
    }


    return 0;
}

感谢您的帮助,祝您度过愉快的一天!