passing a parameter

M

muser

How can I pass the parameter " long part_num[6], into 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)
{

int weightingfactor;
int remainder;
int weightitem1, weightitem2, weightitem3, weightitem4, weightitem5;
int product;
int Mod11 = 11;
int checkdigit;
char partnum[6];




strncpy(partnum, &record[7], 6);
partnum[6] = '\0';
part_num[6] = atol( partnum );



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);




product = (weightitem1 + weightitem2 + weightitem3 + weightitem4 +
weightitem5);

remainder = (product % Mod11);

checkdigit = (Mod11 - remainder);
if(!part_num[6] == checkdigit)
return false;


return true;

} case 'i':
case 'I':
case 'r':
case 'R':
ProcessIRecord( prnfile, temp1 );
CheckDigit( temp1 );
break;
 
K

Kevin Goodsell

muser said:
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
 
W

White Wolf

muser said:
How can I pass the parameter " long part_num[6], into a case
statement. Case statement follows the function CheckDigit.
[SNIP]

You cannot. The switch in C and C++ supports only integer values, not
arrays.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads

The program/ header file contents 2
Reading a file. 3
inialisation problem. 2
function error 6
Access violation error 10
Reading a file 1
char conversion problem 18
Logical error/ whole program contained within. 4

Members online

Forum statistics

Threads
473,744
Messages
2,569,482
Members
44,900
Latest member
Nell636132

Latest Threads

Top