Вот ссылка на картину сообщения об ошибке:Debug Assertion ошибка для программы C
http://www.flickr.com/photos/[email protected]/6798897020/in/photostream
Вот актуальная проблема программирования. Это номер 3
и Вот исходный код
#include <iostream>
#include <string>
#include<stdio.h>
using namespace std;
#define numItems 8
#define numSalesP 10
// the product prices
float prices [numItems] = {345.0, 853.0, 471.0, 933.0, 721.0, 663.0, 507.0, 259.00};
// the product numbers
int prodNum [numItems] = {7, 8, 9, 10, 11, 12, 13, 14};
// the salespersons IDs
int salesP [numSalesP] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// the output file pointers
FILE * filePtrs[numSalesP];
// sales totals for every salespersons
float totals [numSalesP];
//get the product index from the prodNum array
int getProdIndex (int product) {
int i;
for (i=0; i< numItems; i++) {
if (prodNum[i] == product) {
return i;
}
}
return -1;
}
// get a product price from the product index
float getProdPrice (int prodIndex) {
return prices[prodIndex];
}
// open a salesperson output file
void openSalesPFiles() {
int i;
char fileName[16];;
for (i=0; i<numSalesP; i++) {
sprintf(fileName, "salespers%d.dat", i+1);
//DEBUG cout << fileName << endl;
filePtrs[i] = fopen(fileName, "r");
}
}
// close Salespersons files
void closeSalesPFiles() {
int i;
for (i=0; i<numSalesP; i++) {
fclose(filePtrs[i]);
}
}
// get sales person index from its ID
int getSalesPIndex (int salesPerson) {
int i;
for (i=0; i< numSalesP; i++) {
if (salesP[i] == salesPerson) {
return i;
}
}
return -1;
}
int main() {
int i; // generic counter
FILE * salesFile; // the input file with all sales
int salesPId; // salesperson ID
int salesPIndex; // salesperson index in array
int prodId; // product ID
int pIndex; // product index in array
int qty; // quantity
float total; // total for one sale
// open all salespersons output files
openSalesPFiles();
// open the input file
salesFile = fopen("sales.dat", "r");
// read all record in the input file
while (!feof(salesFile)) {
fscanf(salesFile, "%d %d %d", &salesPId, &prodId, &qty);
//DEBUG cout << salesPId << " --- " << prodId << " --- " << qty << endl;
// validate sales person
salesPIndex = getSalesPIndex (salesPId);
if (salesPIndex < 0) {
cout << "Invalid Sales person ID " << salesPId << endl;
continue;
}
//DEBUG cout << "Salesperson index : " << salesPIndex << endl;
// validate product id
pIndex = getProdIndex (prodId);
if (pIndex < 0) {
cout << "invalid product id : " << prodId << endl;
fprintf(filePtrs[salesPIndex], "Invalid Product ID %d\n", prodId);
continue;
}
else {
// compute the sale total
total = qty * prices[pIndex];
//DEBUG cout << "total : " << total << endl;;
// add it to the totals for this salesperson
totals[salesPIndex] += (qty * prices[pIndex]);
// write the sale to the salesperson file
fprintf(filePtrs[salesPIndex], "%d %d %2.2f\n", prodId, qty, total);
}
}
// print totals in salespersons files
for (i=0; i< numSalesP; i++) {
fprintf(filePtrs[i], "Total Sales : %8.2f\n", totals[i]);
}
// close all files
closeSalesPFiles();
fclose(salesFile);
}
Что случилось с кодом, который сделал бы мне иметь такую ошибку? Спасибо: S
Проголосовало за закрытие как «Этот вопрос не подходит для нашего формата Q & A. Мы ожидаем, что ответы, как правило, будут связаны с фактами, ссылками или конкретными знаниями; этот вопрос, скорее всего, потребует мнения, дебаты, аргументы, опрос или расширенное обсуждение ». Пожалуйста, постарайтесь сделать свой вопрос более подходящим для будущих посетителей сайта и посетите [FAQ] (http://stackoverflow.com/faq) –
Я согласен: но я должен добавить: если эта книга, за которой вы следуете, побуждает вас код, как будто вам нужна новая книга, то есть C на C++ вам не хватает точки абстракций, предоставляемых вам C++ – 111111
Стиль кодирования мудрый. Почему бы вам не вернуть несколько значений или несколько параметров вместо глобальных. Нет причин, по которым filePtrs openSalesPFiles не может взять список файлов или вернуть его вместо того, чтобы использовать его как глобальный. Также, если вы допустили использование C++ 11, чтобы вы могли написать 'auto varname = func();' –