使用c++读取文件

Reading in file using C++

本文关键字:文件 读取 c++ 使用      更新时间:2023-10-16

这是2008年Google代码堵塞的一个问题https://code.google.com/codejam/contest/32016/dashboard

问题的语句被复制:

给你两个向量v1 = (x1, x2,…,xn)和v2 = (y1, y2,…,yn)。这些向量的标量积是一个单独的数,计算为x1y1+x2y2+…+xnyn。

假设你可以随心所欲地排列每个向量的坐标。选择两个排列,使你的两个新向量的标量积是最小的,并输出这个最小的标量积。

输入

输入文件的第一行包含整数T——测试用例的数量。对于每个测试用例,第一行包含整数n。接下来的两行各包含n个整数,分别给出v1和v2的坐标。

输出对于每个测试用例,输出一行

Case #X: Y其中X为从1开始的测试用例编号,Y为两个给定向量的所有排列的最小标量积。

和我复制粘贴了Bohua的解决方案,并附上

ifstream in ("A-small-practice.in");        
ofstream out("A-small-practice.out");

,结果如下:

#include <vector>
#include <algorithm>
#include <fstream>
#include <stdlib.h> 
#include <iostream>
using namespace std;
int main()
{
ifstream in ("A-small-practice.in");        
ofstream out("A-small-practice.out");
int numCase;
cin >> numCase;
int i, j, n;
long long c;
for (i = 0; i < numCase; i++)
{
    cin >> n;
    vector<long long> array1, array2;
    for (j = 0; j < n; j++)
    {
        cin >> c;
        array1.push_back(c);
    }
    for (j = 0; j < n; j++)
    {
        cin >> c;
        array2.push_back(c);
    }
    sort(array1.begin(), array1.end());
    sort(array2.begin(), array2.end(), greater<long long>());
    long long ans = 0;
    for (j = 0; j < n; j++)
        ans += (array1[j] * array2[j]);
    cout << "Case #" << (i+1) << ": " << ans << endl;
}
return 0;
}

然而,它没有产生我想要的输出。做法虽小。Out只是一片空白。我插入

的方式有问题吗?
ifstream in ("A-small-practice.in");        
ofstream out("A-small-practice.out"); 

我想让c++读A-small-practice。在文件中,并产生一个小实践。输出文件,代码必须是正确的,因为我所做的只是复制&粘贴博华的解决方案,除了增加以上两行。

我只是想学习如何加载。in扩展文件到c++中,并产生期望的输出。

p。我明白了

不要写入名为"A-small-practice.out"的文件。Cin和cout从命令行或终端写入和读取。

你使用ifstream和ofstream打开了2个文件。您可以在代码中使用名称inout来引用这些对象。

尝试做一些像out << "Send text to file" << endl;因为out是一个ofstream类型,你可以输出数据给它。这是使用流插入操作符完成的:<<

例如,您可能想要执行out << "Case #" << (i+1) << ": " << ans << endl;之类的操作。(我不确定你的程序应该做什么,因为没有注释或解释)

代替cin >> numCase;行,试试这样:

in >> numCase;
out << "Number of cases = " << numCase << std::endl;

这至少应该打印一些到A-small-practice.out。如果它打印出Number of cases = 0,那么我们就知道你的输入有问题(也就是说,至少输入文件不包含与你的输入逻辑试图读取的相同的数据)。

一旦您确定了输入逻辑设置numCase的值,您就可以删除输出"Number of cases = "的行(因为它不是程序所需输出的一部分)。

如果你在那行输出中看到0以外的内容,那么我们可以查看循环内部的内容。但是由于您现在什么也没看到,因此有必要检查一下程序是否实际上在做任何事情。如果输入逻辑设置了numCase = 0,则程序的其余部分被设计为不打印任何内容。