Visual C++-读取文本文件,输出2D数组
Visual C++ - Read text file, output 2D array
当我从main调用setArray和从setArray 调用prinArray时,需要一个']'和表达式
不太确定这里出了什么问题。我必须读取SaleSlip值,然后找到每个销售人员每个prodID的总数。我这样做了,我知道这很有效。之后,我必须输出一个2D数组,其中包含每个销售人员对每个prodID的销售额,这有点困难。我还没有完成对setArray的所有调用,但您可以了解要点。
有关于当前错误的帮助吗?
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
// Create structure SaleSlip for each sale per product per employee
struct SaleSlip{
char name[20];
int prodID;
double value;
};
void setArray(string name, SaleSlip sales[]);
void printArray(string name, double product[][5], int j);
int main(){
// Create stream for text file
fstream slips;
// Initialize sales with 17 different members
SaleSlip sales[17];
// Open .txt for information reading
slips.open("SaleSlips.txt", ios::in);
if(slips.eof()){
cout << "Cannot open file(s) - SaleSlips.txt"<< endl;
exit(1);
}
int i = 0;
// Read and assign all names, product ids and prices to sales[]
while(!slips.eof()){
slips >> sales[i].name;
slips.ignore(80, ' ');
slips >> sales[i].prodID;
slips.ignore(80, ' ');
slips >> sales[i].value;
slips.ignore(80, 'n');
i++;
}
slips.close();
// Format for output
cout << " Prod1 Prod2 Prod3 Prod4 Prod5" << endl;
setArray("Bill", sales[]);
cout << endl << endl;system("pause");
return 0;
}
void setArray(string name, SaleSlip sales[]){
int j;
double product[4][5];
const char * namechar = name.c_str ();
if(strcmp (namechar, "Bill")) j = 0;
if(strcmp (namechar, "Eric")) j = 1;
if(strcmp (namechar, "Sookie")) j = 2;
if(strcmp (namechar, "Tara")) j = 3;
for(int i=0;i<17;i++){
if(strcmp (sales[i].name, namechar) == 0)
switch(sales[i].prodID){
case 1: product[j][1] += sales[i].value; break;
case 2: product[j][2] += sales[i].value; break;
case 3: product[j][3] += sales[i].value; break;
case 4: product[j][4] += sales[i].value; break;
case 5: product[j][5] += sales[i].value; break;
}
}
printArray(name, product[][5], j);
}
void printArray(string name, double product[][5], int j){
cout << name << ": ";
for(int i=0; i<5;i++)
cout << product[j][i] << " ";
cout << endl;
}
现在已经格式化并正确输出:
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
using namespace std;
// Create structure SaleSlip for each sale per product per employee
struct SaleSlip{
char name[20];
int prodID;
double value;
};
void setArray(string name, SaleSlip sales[]);
void printArray(string name, double product[][5], int j);
int main(){
// Create stream for text file
fstream slips;
// Initialize sales with 17 different members
SaleSlip sales[17];
// Open .txt for information reading
slips.open("SaleSlips.txt", ios::in);
if(slips.eof()){
cout << "Cannot open file(s) - SaleSlips.txt"<< endl;
exit(1);
}
int i = 0;
// Read and assign all names, product ids and prices to sales[]
while(!slips.eof()){
slips >> sales[i].name;
slips.ignore(80, ' ');
slips >> sales[i].prodID;
slips.ignore(80, ' ');
slips >> sales[i].value;
slips.ignore(80, 'n');
i++;
}
slips.close();
// Format for output
cout << " Prod1 Prod2 Prod3 Prod4 Prod5" << endl;
setArray("Bill", sales);
setArray("Eric", sales);
setArray("Sookie", sales);
setArray("Tara", sales);
cout << endl << endl;system("pause");
return 0;
}
void setArray(string name, SaleSlip sales[]){
int j = -1;
double product[4][5] = {0};
const char * namechar = name.c_str ();
if(strcmp (namechar, "Bill") == 0) j = 0;
if(strcmp (namechar, "Eric") == 0) j = 1;
if(strcmp (namechar, "Sookie") == 0) j = 2;
if(strcmp (namechar, "Tara") == 0) j = 3;
for(int i=0;i<17;i++){
if(strcmp (sales[i].name, namechar) == 0)
switch(sales[i].prodID){
case 1: product[j][0] += sales[i].value;break;
case 2: product[j][1] += sales[i].value;break;
case 3: product[j][2] += sales[i].value;break;
case 4: product[j][3] += sales[i].value;break;
case 5: product[j][4] += sales[i].value;break;
default: cout << "Safety.";
}
}
printArray(name, product, j);
}
void printArray(string name, double product[][5], int j){
cout << setiosflags(ios::left | ios::fixed) << setprecision(2);
cout << setw(10) << name + ":";
for(int i=0; i<5;i++)
if(product[j][i] != 0)
cout << setw(10) << product[j][i];
else cout << setw(10) << 0;
cout << endl;
}
-
如果字符串相等,您应该检查
strcmp
是否返回0:if (strcmp(namechar, "Bill") == 0);
-
将数组作为参数传递时不需要
[]
,只有在创建一个时才需要:setArray("Bill", sales); // ... printArray(name, product, j);
-
for循环的第一次迭代会导致程序中出现"未定义的行为",因为
product
数组未初始化。请改用std::vector
。
您可能应该使用std::map<std::string, double>
,而不是双的数组
更改
setArray("Bill", sales[]);
至
setArray("Bill", sales);
相关文章:
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- fftw:为什么我的 2D DFT 输出与每行的 1D DFT 输出不同?
- 将文本文件读取到2D数组中,但数组开始为超过数组[39][]的任何内容输出胡言乱语
- 我的 2D 阵列无法读取文本文件并正确输出
- 用于输出 2D 矢量的语法
- 2D 数组,在网格上输出 x 和 y 轴
- 动态分配的输入,并在C 中输出2D阵列
- C++调试 - 从文件中读取并输出 2D 数组
- 输出 2D 数组及其元素的总和
- 输入和输出的2D字符数组问题
- C++2D数组空白输出
- C++循环 2D 数组奇怪的输出
- 如何输出 2D 数组C++的行总和
- 从数据文件读取到 2D 数组.无输出.C++
- 动态初始化的 2D 数组输出错误
- C++指针和2d数组输出
- Visual C++-读取文本文件,输出2D数组
- 正在从文本文件创建2d int表.输出可能是内存块
- 通过2d数组进行迭代和输出
- 如何使用嵌套的for循环输出2D字符数组