Hello there, I made this code for an ISBN verifier but there's a problem with it

#include <iostream>
#include <fstream>                                        // REQUIRED FOR FILE STREAMS
#include <cstdlib>                                     // FOR DEFINITION OF EXIT_FAILURE
#include <cctype>
#include <string>
using namespace std;

// ASSOCIATE STREAMS WITH EXTERNAL FILE NAMES
#define inFile "isbntest.txt"                         // LINKED ISBN FILE (LIST) SOURCE

// FUNCTIONS USED
void menuPrompt ();                                    // MAIN MENU USER INSTRUCTION
void userVal ();                                       // MANUAL INPUT VALIDATION
int readFile ();                                     // LINKED FILE VALIDATION
bool isbnCheckForUser (string isbn);                   // ISBN VALIDATION FUNCTION FOR USER INPUT
bool isbnCheckForFile (string isbn);                // ISBN VALIDATION FUNCTION FOR FILE INPUT

int main ()
{
    char choice;                                                                        // INPUT-MAIN MENU CHOICE
    string isbn;

        do
        {
            menuPrompt ();
            cin >> choice;
            switch (choice)
            {
            case '1':
                    userVal ();
                    break;
            case '2':
                    readFile ();
                    break;
            case '3':
                    cout << "Thank you for using ISBN-Check. Have a nice day!" << endl;
                    break;
            default:
                    cerr << "Oops! Incorrect selection. Please try again." << endl;
            }            
        }
        while (choice != '3');
    
    system ("pause");

    return 0;
}

void menuPrompt ()
{
    cout << "Welcome to ISBN-Check." << endl;
    cout << "This program will verify the format of your ISBN(s)." << endl;
    cout << "To manually input the ISBN(s), enter 1." << endl;
    cout << "To verify the ISBN(s) from the linked .txt file, etner 2." << endl;
    cout << "When you're done, enter 3 to exit the program." << endl;
}

void userVal ()
{
    char subchoice;                                          // INPUT- SUB MENU CHOICE
    string isbn;                                             // INPUT- ISBN STRING
    do
    {
    cout << "Enter an ISBN:";
    cin >> isbn;
    isbnCheckForUser (isbn);
    if (isbnCheckForUser (isbn) == true)
        cout << "This is a valid ISBN." << endl;
    else
        cout << "This is NOT a valid ISBN." << endl;
    cout << endl;
    cout << "To go back to the main menu, enter 1." << endl;
    cout << "To continue manually inputting ISBN(s), enter any digit besides 1." << endl;
    cin >> subchoice;
    }
    while (subchoice != '1');
    
}

int readFile ()
{
    ifstream fin;
    string isbn;
    fin.open (inFile);
    if (fin.fail ())
    {
        cerr << " ERROR: Cannot open " << inFile << " for input. " << endl;
        return EXIT_FAILURE;                                                                // FAILURE RETURN
    }
    fin >> isbn;
    isbnCheckForFile (isbn);
    if (isbnCheckForFile (isbn) == true)
        cout << "This is a valid ISBN." << endl;
    else
        cout << "This is NOT a valid ISBN." << endl;
        
}

bool isbnCheckForUser (string isbn)
{
    int isbn0;
    int isbn1;
    int isbn2;
    int isbn3;
    int isbn4;
    int isbn5;
    int isbn6;
    int isbn7;
    int isbn8;
    int isbn9;
    int sum;
    int modulo;
    
    if (isbn.at(0) == '-' || isbn.at(isbn.length()-1) == '-')
        cout << "This is NOT a valid ISBN." << endl;
        
        isbn.find('-');                                
        isbn.erase('-');
        isbn.at(0) = isbn0;
        isbn.at(1) = isbn1;
        isbn.at(2) = isbn2;
        isbn.at(3) = isbn3;
        isbn.at(4) = isbn4;
        isbn.at(5) = isbn5;
        isbn.at(6) = isbn6;
        isbn.at(7) = isbn7;
        isbn.at(8) = isbn8;
        isbn.at(9) = isbn9;
            
    if (isbn.at(isbn.length()-1) == 'x' || isbn.at(isbn.length()-1) == 'X')
        isbn9 = 10;
        
    sum= isbn0 * 1 + isbn1 * 2 + isbn2 * 3 + isbn3 * 4 + isbn4 * 5 + isbn5 * 6 + isbn6 * 7 + isbn7 * 8 + isbn8 * 9;
    modulo = sum / 11;
    
    if (modulo = 10 && isbn.at(isbn.length()-1) == 'x' || isbn.at(isbn.length()-1) == 'X')
        cout << "This is a valid ISBN." << endl;
    
    else if (modulo = 10 && isbn.at(isbn.length()-1) != 'x' || isbn.at(isbn.length()-1) != 'X')
        cout << "This is NOT a valid ISBN." << endl;
            
    else if (modulo != isbn9)
        cout << "This is Not a valid ISBN." << endl;
            
    else
        cout << "This is a valid ISBN." << endl;
}

bool isbnCheckForFile (string isbn)
{
    ifstream fin;
    int num_of_isbn;
    int count;
    int isbn0;
    int isbn1;
    int isbn2;
    int isbn3;
    int isbn4;
    int isbn5;
    int isbn6;
    int isbn7;
    int isbn8;
    int isbn9;
    int sum;
    int modulo;

    getline(istream& fin, string& num_of_isbn, char '\n');
    fin.ignore( 80, '\n');
    while (!fin.eof())
        {
            for (count=0; count < num_of_isbn; count++)
                {
                    getline (fin, isbn);
                    if (isbn.at(0) == '-' || isbn.at(isbn.length()-1) == '-')
                    cout << "This is NOT a valid ISBN." << endl;
                    isbn.find('-');                                //HOW DO I COUNT THE NUMBER OF DASHES?
                    isbn.erase('-');
                    isbn.at(0) = isbn0;
                    isbn.at(1) = isbn1;
                    isbn.at(2) = isbn2;
                    isbn.at(3) = isbn3;
                    isbn.at(4) = isbn4;
                    isbn.at(5) = isbn5;
                    isbn.at(6) = isbn6;
                    isbn.at(7) = isbn7;
                    isbn.at(8) = isbn8;
                    isbn.at(9) = isbn9;
                    if (isbn.at(isbn.length()-1) == 'x' || isbn.at(isbn.length()-1) == 'X')
                    isbn9 = 10;
                    sum= isbn0 * 1 + isbn1 * 2 + isbn2 * 3 + isbn3 * 4 + isbn4 * 5 + isbn5 * 6 + isbn6 * 7 + isbn7 * 8 + isbn8 * 9;
                    modulo = sum / 11;
                    if (modulo = 10 && isbn.at(isbn.length()-1) == 'x' || isbn.at(isbn.length()-1) == 'X')
                    cout << "This is a valid ISBN." << endl;
                    else if (modulo = 10 && isbn.at(isbn.length()-1) != 'x' || isbn.at(isbn.length()-1) != 'X')
                    cout << "This is NOT a valid ISBN." << endl;
                    else if (modulo != isbn9)
                    cout << "This is Not a valid ISBN." << endl;
                    else
                    cout << "This is a valid ISBN." << endl;
                }
        }
}

on the 177th Line getline(istream& fin, string& num_of_isbn, char '\n');
I get these 3 errors
error C2275: 'std::string' : illegal use of this type as an expression
error C2275: 'std::istream' : illegal use of this type as an expression
error C2062: type 'char' unexpected

Can someone help me with this problem?

You should post only problematic section of the code, not the entire file!

getline(istream& fin, string& num_of_isbn, char '\n');

You need declare these variables and then pass them to the function, ie

istream fin;
string num_of_isbn;
char a;
getline(fin, num_of_isbn, a);

The & will be in the actual function definition (not the line that you call the function from) and means to accept the variable by reference instead of by value.

Dave

This article has been dead for over six months. Start a new discussion instead.