我需要从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 ++读取文本文件并将这些数字用作输入呢?
答案 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
作为第一个输入实际上是三个独立的数字(1
,3
和1
)。如果是这样,最简单的方法是更改输入文件,在每个输入文件之间放置一个空格:
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个字符。您可能希望使用更明显的内容,例如.
。