C++ 该项目赢得了';t读取C+中的第二个向量+;

C++ 该项目赢得了';t读取C+中的第二个向量+;,c++,vector,C++,Vector,因此,我尝试编写一个函数,可以返回两个向量的标量积(即a0b0+a1b1+…),但每当我运行程序时,它只会读取第一组输入(即向量a),然后第二个向量(向量b)会自动“跳过”,程序会返回一个非常奇怪的数字,如2.122e-314。那么这段代码有什么问题?(为了简单起见,我只是假设向量a和b的大小相同。)Thx #包括 #包括 使用名称空间std; /** 计算两个向量的标量积。 @参数a,b两个向量 @返回两个向量的乘积之和:a0b0+a1b1+。。。 */ 双标量_积(向量&a,向量&b) {

因此,我尝试编写一个函数,可以返回两个向量的标量积(即a0b0+a1b1+…),但每当我运行程序时,它只会读取第一组输入(即向量a),然后第二个向量(向量b)会自动“跳过”,程序会返回一个非常奇怪的数字,如2.122e-314。那么这段代码有什么问题?(为了简单起见,我只是假设向量a和b的大小相同。)Thx

#包括
#包括
使用名称空间std;
/**
计算两个向量的标量积。
@参数a,b两个向量
@返回两个向量的乘积之和:a0b0+a1b1+。。。
*/
双标量_积(向量&a,向量&b)
{
双乘积;
对于(int i=0;i>s;
if(cin.fail())
更多=错误;
其他的
a、 推回;
}
返回a;
}
int main()
{
载体a;

cout您需要在读取第一个向量后调用
cin.clear()
来重置错误标志。正如Peter所提到的,您还需要忽略
cin
中的非数字字符。您可以使用类似
cin.ignore(10000,“\n”);
的方法来完成此操作,它将忽略所有字符,直到新的一行。

  • 您需要清除错误状态并刷新输入缓冲区。这不会神奇地发生
  • scalar_product()
    如果第二个向量小于第一个向量,则显示未定义的行为。 无论如何,数学标量积只为两个大小相等的向量定义

您可能需要删除,即在尝试读取更多数字之前读取cin中挂起的非数字输入。因此,我在“more=false”之后添加了“cin.clear()”,现在它要求我在第二个系列上输入;但是,当我输入数字“例如2”时,它告诉我“错误:2不是有效命令”。为什么?朱庇特姆:请看我对关于
cin.ignore的回答的修订。GWW:Thx,该cin.ignore起作用了。现在,就我所做的努力而言,它起到了预期的作用。谢谢。我的一般建议是避免手动输入,并准备与程序的标准输入相连接的文件,使用“prog#include <iostream>
#include <vector>

using namespace std;

/**
 Calculates the scalar product of two vectors.
 @param a, b two vectors
 @return the sum of product of two vectors: a0b0 + a1b1 + ...
 */
double scalar_product (vector<double>& a, vector<double>& b)
{
    double product;
    for (int i = 0; i < a.size(); i++)
        product += a[i] * b[i];
    return product;
}

/**
 Reads in a new vector.
 */
vector<double> read (vector<double>& a)
{
    bool more = true;
    while (more)
    {
        double s;
        cin >> s;
        if (cin.fail())
            more = false;
        else
            a.push_back(s);
    }
    return a;
}

int main()
{
    vector<double> a;
    cout << "Please enter the numbers of the first series, enter any non-number character to quit: ";
    read (a);

    vector<double> b;
    cout << "Please enter the numbers of the second series, enter any non-number character to quit: ";
    read (b);
    cout << "The scalar product of the two series is " << scalar_product(a, b) << "\n";
    return 0;
}