I'm posting the code of my program and the messages the compiler gives. I spent almost 2 days to find the problems, but couldn't, I don't understand arrays and pointer well.
Code:
#include <stdio.h>
#include <string.h>
#define BUFSIZE 256
#define TRUE 1
#define FALSE 0
char getISBN(char ISBN[]);
char checkDigitFromISBN(const char ISBN[]);
void getPartISBNFromISBN(char PartISBN[], const char ISBN[], unsigned nChars);
unsigned digitFromCharacter(char ch);
char characterFromDigit(unsigned digit);
char calculateCheckDigit(const char PartISBN[]);
int checkDigitAreEqual(char claculatedCheckDigit, char theCheckDigit);
int main(void)
{
char string[BUFSIZ], part[BUFSIZ], isbn[BUFSIZ], checkDigit[BUFSIZ], calculate[BUFSIZ];
strncpy(isbn, getISBN(string), 11);
strncpy(checkDigit, checkDigitFromISBN(isbn), 2);
getPartISBNFromISBN(part, isbn, 10);
strncpy(calculate, calculateCheckDigit(part), 2);
if(checkDigitAreEqual(calculate, checkDigit) == 0)
printf("The number entered is not a valid ISBN\n");
else if(checkDigitAreEqual(calculate, checkDigit) == 1)
printf("ISBN is OK\n");
}
char getISBN(char ISBN[])
{
printf("Enter the ISBN number: ");
fgets(ISBN, BUFSIZE, stdin);
return ISBN;
}
char checkDigitFromISBN(const char ISBN[])
{
return ISBN[9];
}
void getPartISBNFromISBN(char PartISBN[], const char ISBN[], unsigned nChars)
{
strncpy(PartISBN, ISBN, nChars);
}
unsigned digitFromCharacter(char ch)
{
return (unsigned)ch - '0';
}
char characterFromDigit(unsigned digit)
{
return (char)digit + '0';
}
char calculateCheckDigit(const char PartISBN[])
{
unsigned i = 0u;
unsigned integer;
unsigned weight = 10u;
unsigned partSum;
unsigned total;
unsigned remainder;
unsigned check;
char character;
while(PartISBN[i] != NULL)
{
integer = digitFromCharacter(PartISBN[i]);
partSum = integer * weight;
i++;
weight--;
total = total + partSum;
}
remainder = total % 11;
check = 11 - remainder;
return character = characterFromDigit(check);
}
int checkDigitAreEqual(char calculatedCheckDigit, char theCheckDigit)
{
if(calculatedCheckDigit == theCheckDigit)
return TRUE;
else
return FALSE;
}
COMPILER MESSAGES:
[root@dhcppc2 prog]# cc -o prog prog6.c
prog6.c: In function `main':
prog6.c:26: warning: passing arg 2 of `strncpy' makes pointer from integer without a cast
prog6.c:28: warning: passing arg 2 of `strncpy' makes pointer from integer without a cast
prog6.c:32: warning: passing arg 2 of `strncpy' makes pointer from integer without a cast
prog6.c:34: warning: passing arg 1 of `checkDigitAreEqual' makes integer from pointer without a cast
prog6.c:34: warning: passing arg 2 of `checkDigitAreEqual' makes integer from pointer without a cast
prog6.c:36: warning: passing arg 1 of `checkDigitAreEqual' makes integer from pointer without a cast
prog6.c:36: warning: passing arg 2 of `checkDigitAreEqual' makes integer from pointer without a cast
prog6.c: In function `getISBN':
prog6.c:44: warning: return makes integer from pointer without a cast
prog6.c: In function `calculateCheckDigit':
prog6.c:78: warning: comparison between pointer and integer