从外部文件获取输入?

时间:2012-01-07 22:36:58

标签: c++ file input external

我需要从C ++的外部文件中获取非常基本的输入。我试过几次在互联网上搜索,但没有真正适用于我需要的东西。这将是一个.txt文件,它来自它的输入,它将填充这样的行:

131
241个
371个
481

我已经有代码手动获取此输入,它看起来像这样:

using namespace std;
//Gets the initial values from the user.
    int control=0;
    while (rowb!=0){
        cout << "Row: ";
        cin >> rowb;
        cout << "Column: ";
        cin >> columnb;
        cout << "Number: ";
        cin >> numb;
        row[control]=rowb-1;
        column[control]=columnb-1;
        num[control]=numb;
        control++;
    }

这是解决sudoko董事会的计划的一部分。输入的数字是sudoko板所持有的初始值,用户正在输入来自电路板的行,列和数字。
我需要的是能够创建一个.txt文件,这些数字存储在行中,这样我就不必输入这么多数字。我几乎不知道如何去做这件事。主要是我只会使用txt文件来测试我的程序,因为我继续添加更多代码。我的程序中需要150多个输入的数字才能获得一块电路板,这需要花费很多时间。任何意外错误的输入值也是一个巨大的问题,因为我必须重新开始。那么我如何让C ++读取文本文件并将这些数字用作输入呢?

4 个答案:

答案 0 :(得分:5)

除了其他建议之外,你可以简单地将文件重定向到标准输入,就像这样(其中$是命令提示符):

$ myprogram < mytextfile.txt

这将正常运行myprogram但是从mytextfile.txt获取输入,就像您输入了它一样。根本不需要调整自己的程序。

(这适用于Unix / Linux系统和Windows。)

答案 1 :(得分:2)

您可以从标题std::ifstream打开一个文件以便输入<fstream>,然后像std::cin一样从中读取。

int main()
{
    std::ifstream input("somefile.txt");
    int a;
    input >> a;  // reads a number from somefile.txt
}

显然,您可以在循环中使用>>来读取多个数字。

答案 2 :(得分:2)

创建一个std::ifstream对象,然后从std::cin开始读取它。至少如果我理解你要做的是什么,131作为第一个输入实际上是三个独立的数字(131 )。如果是这样,最简单的方法是更改​​输入文件,在每个输入文件之间放置一个空格:

1 3 1
2 4 1
3 7 1
4 8 1

答案 3 :(得分:0)

就个人而言,我会从文件的不同格式开始:为每个单元格输入一个值。也就是说,输入文件中的每一行都代表sudoko板中的一行。空字段将使用空格字符。直接的优势是输入实际上看起来像sudoko板。此外,您最多可输入90个字符:电路板的9个字符和每行的换行符:

#include <iostream>
#include <fstream>
#include <algorithm>
#include <iterator>

int main(int ac, char* av[])
{
    std::ifstream in(ac == 1? "sudoko.init": av[1]);
    char board[9][9];
    for (int i(0); i != 9; ++i)
    {
        in.read(board[i], 9).ignore();
    }
    if (!in)
    {
        std::cout << "failed to read the initial board\n";
    }
    else
    {
        typedef std::ostream_iterator<char> iterator;
        std::fill_n(iterator(std::cout << "board:\n\n+", "+"), 9, '=');
        for (int i(0); i != 9; ++i)
        {
            std::copy(board[i] + 0, board[i] + 9, iterator(std::cout << "\n|", "|"));
            std::fill_n(iterator(std::cout << "\n+", "+"), 9, (i + 1) % 3? '-': '=');
        }
        std::cout << "\n";
    }
}

这将采取如下输入:

 4  5 3 8
71   3   
   16  7 
   6 4  7
  6   8  
1  9 5   
 6  42   
   5   94
4 7 9  3 

请注意,这些行中的每一行都使用9个字符。您可能希望使用更明显的内容,例如.