令人困惑的语法错误

时间:2016-04-04 04:24:36

标签: c++ visual-studio file syntax-error

我正在制作一个程序,从文件中获取信息,然后将其放入结构中,然后生成一个结构数组。我已经完成了程序,但是当我编译时,我得到2个错误。 “预期声明”和“语法错误:常量”都指向读入文件的第一行。我不知所措,我不知道如何让它运行。我使用的代码如下所示:

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
#include <stdlib.h>
using namespace std;

struct book
{
    int ISBN;
    string Author;
    string Title;
    int Quantity;
    double price;
};

void choice1(book books[], int& size, int MAX_SIZE)
{
    ifstream inFile;
    inFile.open("Inventory.txt");
    string str;

    while (inFile && size < MAX_SIZE)
    {
        getline(inFile, str);
        books[size].ISBN = atoi(str.c_str());

        getline(inFile, books[size].Author);

        getline(inFile, books[size].Title);

        getline(inFile, str);
        books[size].Quantity = atoi(str.c_str());

        getline(inFile, str);
        books[size].price = atoi(str.c_str());

        getline(inFile, str);
        size++;
    }

    cout << "You have successfully read the file." << endl;
    inFile.close();
}

void choice2(book books[], int size)
{
    for (int i = 0; i < size; i++)
    {
        cout << endl;
        cout << "Book Number: " << (i + 1) << endl;
        cout << "ISBN: " << books[i].ISBN << endl;
        cout << "Author: " << books[i].Author << endl;
        cout << "Title: " << books[i].Title << endl;
        cout << "Quantity: " << books[i].Quantity << endl;
        cout << "Price: $" << books[i].price << endl;
    }

    if (size != 0)
        cout << "You have successfully printed the array." << endl;
    else
        cout << "Array is empty. Read the file first." << endl;
}

void choice3(book books[], int size)
{
    if (size == 0)
        cout << "Array is empty. Read the data first." << endl;
    else
    {
        int isbn;
        int option;
        int qty;

        cout << "\nEnter the ISBN of the book: ";
        cin >> isbn;

        cout << "1. Increment" << endl;
        cout << "2. Decrement" << endl;
        cout << "3. Add New" << endl;
        cout << "Enter your option: ";
        cin >> option;

        cout << "Enter the quantity: ";
        cin >> qty;

        for (int i = 0; i < size; i++)
        {
            if (books[i].ISBN == isbn)
            {
                if (option == 1)
                    books[i].Quantity += qty;
                else if (option == 2)
                {
                    books[i].Quantity -= qty;

                    if (books[i].Quantity)
                        books[i].Quantity = 0;
                }
                else if (option == 3)
                    books[i].Quantity = qty;

                break;
            }
        }

        cout << "You have successfully updated the array." << endl;
    }
}

void choice4(book books[], int& size, int MAX_SIZE)
{
    if (size < MAX_SIZE)
    {
        string str;

        cout << "\nEnter the book ISBN: ";
        cin >> books[size].ISBN;

        cout << "Enter the author name: ";
        cin >> books[size].Author;

        cout << "Enter the book tile: ";
        cin >> books[size].Title;
        cin.get();

        cout << "Enter the books quantity: ";
        cin >> books[size].Quantity;

        cout << "Enter the book price: $";
        cin >> books[size].price;

        size++;
        cout << "You have successfully inserted an entry." << endl;
    }
}

void choice5(book books[], int size)
{
    for (int i = 1; i < size; i++)
    {
        book current = books[i];
        int j = i;
        while (j > 0 && (books[j - 1].Title).compare(current.Title) > 0)
        {
            books[j] = books[j - 1];
            j--;
        }
        books[j] = current;
    }

    if (size != 0)
        cout << "You have successfully sorted the array." << endl;
    else
        cout << "Array is empty. Read the data first." << endl;
}

void choice6(book books[], int& size)
{
    if (size == 0)
        cout << "Array is empty. Read the data first." << endl;
    else
    {
        int isbn;

        cout << "\nEnter the ISBN of the book: ";
        cin >> isbn;

        for (int i = 0; i < size; i++)
        {
            if (books[i].ISBN == isbn)
            {
                int j = i;
                while (j < size - 1)
                {
                    books[j] = books[j + 1];
                    j++;
                }

                size--;
                break;
            }
        }

        cout << "You have successfully deleted an entry." << endl;
    }
}

void choice7(book books[], int size)
{
    ofstream outFile;
    outFile.open("finalData.dat");

    for (int i = 0; i < size; i++)
    {
        outFile << "Book Number: " << (i + 1) << endl;
        outFile << "ISBN: " << books[i].ISBN << endl;
        outFile << "Author: " << books[i].Author << endl;
        outFile << "Title: " << books[i].Title << endl;
        outFile << "Quantity: " << books[i].Quantity << endl;
        outFile << "Price: $" << books[i].price << endl << endl;
    }

    if (size != 0)
        cout << "You have successfully printed the array." << endl;
    else
        cout << "Array is empty. Read the file first." << endl;

    outFile.close();
}


// File: Boookstore.cpp
#include<iostream>
#include"Inventory.txt"
using namespace std;

int main()
{
    const int MAX_SIZE = 100;
    int size = 0;
    int choice;
    book books[MAX_SIZE];

    do
    {
        cout << "1: Read inventory forn file" << endl;
        cout << "2: Display Inventory" << endl;
        cout << "3: Update an entry" << endl;
        cout << "4: Add an entry" << endl;
        cout << "5: Sort inventory" << endl;
        cout << "6: Delete an entry" << endl;
        cout << "7: Write inventory to file and exit" << endl;
        cout << "Enter your choice: ";
        cin >> choice;

        switch (choice)
        {
        case 1:
            choice1(books, size, MAX_SIZE);
            break;
        case 2:
            choice2(books, size);
            break;
        case 3:
            choice3(books, size);
            break;
        case 4:
            choice4(books, size, MAX_SIZE);
            break;
        case 5:
            choice5(books, size);
            break;
        case 6:
            choice6(books, size);
            break;
        case 7:
            choice7(books, size);
            cout << "Thank you." << endl;
            break;
        default:
            cout << "Invalid choice!" << endl;
        }
        cout << endl;
    } while (choice != 7);

    system("pause");
    return 0;
}

我的读取文件与我的源文件位于同一文件夹中,但我不确定导致该问题的原因。我的阅读文件就是这样:

20451
My First Book
Mark Lusk
Pearson Publishing
40
45.34
9780316
Brown Family
Mason Victor
Little Brown
36
105.99
1349877
Story of My Life
Norah M Jones
CreateSpace Independent Publishing Platform
20
18

它应该占用文件的第一行并将其设置为我的结构的ISNB部分的int,但它只是告诉我它是一个常量。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:2)

您不能#include数据文件。它将它视为代码的一部分 - 而且它显然不是有效的c ++。

#include "Inventory.txt"

您必须打开文件并使用ifstream等内容进行阅读。