对 4 字节值使用运算符'*',然后将结果转换为 8 字节值



我必须编写一个程序,从.dat文件中以以下格式获取学生的分数

COS1511 30 66 70 49
COS1512 25 76 75 67
COS1521 10 58 90 62
COS1501 50 62 50 57
INF1501 40 82 60 78
INF1511 20 24 80 55

字段为:

受试者ID、作业1的权重(%(、作业1、作业2的权重(百分比(、作业2、

输出应该是最后一个标记,像这样写入.dat:

COS1511 54.10%
COS1512 69.25%
COS1521 61.60%
COS1501 59.50%
INF1501 79.60%
INF1511 48.80%

这是我的代码:

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
bool isNumber(string str)
{
for (char c : str) {
if (isdigit(c) == 0) return false;
}
return true;
}
int main()
{
ifstream inStream;
ofstream outStream;
string str;
vector<int> Marks;
vector<string> Subjects;
vector<double> calcdMarks;
int i = 0;

inStream.open("Input.dat");
outStream.open("Output.dat");

while (inStream >> str) {
if (isNumber(str)) {
Marks.push_back(stoi(str));
}
else
Subjects.push_back(str);
}
for (i = 0; i <= Subjects.size()-1; i++) {
calcdMarks.push_back(Marks[i] * (Marks[i + 1] / 100));
calcdMarks.push_back(Marks[i + 2] * (Marks[i + 3] / 100));
}
for (i = 0; i <= Subjects.size()-1; i++) {
cout << Subjects[i] << " " << calcdMarks[i] << " " << calcdMarks[i + 1] << endl;
}
inStream.close();
outStream.close();
}

我遇到的问题是我的程序输出如下:

COS1511 0% 0%
COS1512 0% 0%
COS1521 0% 0%
COS1501 0% 0%
INF1501 0% 0%
INF1511 0% 0%

我似乎找不到原因。我怀疑问题出在这里:

for (i = 0; i <= Subjects.size()-1; i++) {
calcdMarks.push_back(Marks[i] * (Marks[i + 1] / 100));
calcdMarks.push_back(Marks[i + 2] * (Marks[i + 3] / 100));
}

Marks[i] * (Marks[i + 1] / 100Marks[i + 2] * (Marks[i + 3] / 100)

"对4字节的值使用运算符"*",然后将结果强制转换为8字节的值"*";

stoi将String转换为Integer。尝试将结果转换为双精度。

Return Value:
On success, the function returns the converted integral number as an int value.

相关内容

最新更新