我使用以下代码将两个向量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++;
}
答案 0 :(得分:1)
我认为问题可能是你用fscanf读取的第一个值实际上被丢弃的事实,因为它会被第二次调用fscanf(while条件中的那个)立即覆盖。通过这种方式,您可能会以错误的方式读取值,将第一对的第二个值与第二个的第一个值进行比较,依此类推。 只需删除第3行的fscanf调用。
答案 1 :(得分: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);
}
}
答案 2 :(得分:0)
我认为问题在于,您没有处理scanf()
来电中的空白。您可以使用
scanf("\n%lu %lu", &ia, &ib)
或
scanf("%lu %lu\n", &ia, &ib)
取决于您是否要使用前导或尾随换行符。