0

我正在使用以下代码将两个向量 a 和 b 中的数量差异存储到向量 d 中,但它无法正常工作。你能告诉错误在哪里吗?输入文件的文本如下: 10- 对数

8 50   //value in a -space- value in b
74 59
31 73
45 79
24 10
41 66
93 43
88 4
28 30
41 13

编码:

long int x, i = 0, j = 0;
FILE *fp = fopen("jobs.txt", "r");
fscanf(fp, "%lu", &x);
long int c = x;
vector<long int> a;
vector<long int> b;
vector<long int> d;

while (fscanf(fp, "%lu", &x) != EOF)

{
    a.pb(x);
    i++;
    fscanf(fp, "%lu", &x);
    b.pb(x);
    j++;
}

int k = 0;

while (k < c)
{
    d.pb(a[k] - b[k]);
    k++;
}
4

3 回答 3

1

关于逐元素向量差值计算,一个简单的方法是使用标准库算法std::transform和函数对象,如std::minus. 此示例计算两个向量的元素差异并将其存储在第三个向量中:

#include <iostream>
#include <algorithm>
#include <functional>
#include <iterator>

int main()
{
  std::vector<int> a={10, 10, 10, 10, 10};
  std::vector<int> b={0, 1, 2, 3, 4};
  std::vector<int> c;

  std::transform(a.begin(),
                 a.end(),
                 b.begin(), 
                 std::back_inserter(c),
                 std::minus<int>());

  for (const auto& i : result)
    std::cout << i << " ";
  std::cout << std::endl;
}

关于将数字对读入两个向量,您可以考虑从std::ifstream.

#include <fstream>
#include <vector>

int main()
{
  std::ifstream fp("jobs.txt");

  int ia, ib;
  while (fp >> ia >> ib)
  {
    a.push_back(ia);
    b.push_back(ib);
  }
}
于 2013-09-14T07:21:19.147 回答
1

我认为问题可能是您使用 fscanf 读取的第一个值实际上被丢弃了,因为它立即被第二次调用 fscanf (在 while 条件中的那个)覆盖。这样,您可能会以错误的方式读取值,将第一对的第二个值与第二个的第一个值进行比较,依此类推。只需删除第 3 行的 fscanf 调用。

于 2013-09-14T06:08:25.880 回答
0

我认为问题在于,您没有处理scanf()通话中的空格。您可以使用以下方法轻松读取您的值对

scanf("\n%lu %lu", &ia, &ib)

或者

scanf("%lu %lu\n", &ia, &ib)

取决于您是要使用前导换行符还是尾随换行符。

于 2013-09-14T07:57:47.330 回答