muser wrote:
> How can I pass the parameter " long part_num[6], into a case
> statement.
I don't understand that question. You don't pass parameters to "case
statements" (there's really no such thing as a case statement).
> Case statement follows the function CheckDigit.
>
> i.e. CheckDigit( something, temp1 );
>
> Thank you for your help in advance.
>
>
> bool CheckDigit(long part_num[6], char* record)
Please not that you are not, in fact, passing an array to this function.
The type of part_num is actually "long *". Therefore it may be prudent
to also pass in the length of the array pointed to by part_num. The 6 in
this case has no meaning (the compiler ignores it).
Also, prefer std::string to char* for dealing with strings.
> {
>
> int weightingfactor;
> int remainder;
> int weightitem1, weightitem2, weightitem3, weightitem4, weightitem5;
Why not
int weightitem[5];
or
std::vector<int> weightitem(5);
?
> int product;
> int Mod11 = 11;
Is this really any better than just using the magic number 11? Use a
descriptive name or don't use a name at all.
> int checkdigit;
> char partnum[6];
Prefer std::string to char arrays when dealing with strings.
>
> strncpy(partnum, &record[7], 6);
Are you quite sure you can index that far into record?
> partnum[6] = '\0';
This is illegal. The last valid index for partnum is 5.
> part_num[6] = atol( partnum );
If part_num is actually 6 elements long as you suggest, then this is
illegal. The last valid index is 5.
Also, atol is a very unsafe function. strtol would be better. using
strings and streams (istringstream for this conversion) would be better
still. Another good option would be something like boost::lexical_cast
or your own conversion function (using one of the safe methods).
> weightingfactor = 6;
> weightitem1 = (part_num[1] * weightingfactor);
> weightingfactor = 5;
> weightitem2 = (part_num[2] * weightingfactor);
> weightingfactor = 4;
> weightitem3 = (part_num[3] * weightingfactor);
> weightingfactor = 3;
> weightitem4 = (part_num[4] * weightingfactor);
> weightingfactor = 2;
> weightitem5 = (part_num[5] * weightingfactor);
OK.... Why did you not use an array or vector, then loop to do this? Or
at least eliminate weightingfactor by multiplying by the magic number
directly.
>
> product = (weightitem1 + weightitem2 + weightitem3 + weightitem4 +
> weightitem5);
>
> remainder = (product % Mod11);
>
> checkdigit = (Mod11 - remainder);
> if(!part_num[6] == checkdigit)
Another bad index, probably.
> return false;
Indent that so people can see it goes with the 'if'. Better yet, enclose
it in {}.
>
>
> return true;
>
> }
> case 'i':
> case 'I':
> case 'r':
> case 'R':
> ProcessIRecord( prnfile, temp1 );
> CheckDigit( temp1 );
> break;
I'm afraid I still don't understand what you are asking. But your
CheckDigit call here is missing a parameter.
-Kevin
--
My email address is valid, but changes periodically.
To contact me please use the address from a recent posting.
|