2016-04-04 104 views
-3

我正在制作一个程序,它从文件中获取信息,然后将其放入结构中,然后生成一个结构数组。我已经完成了程序,但是当我编译时,我得到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 

它应该采取文件的第一行,并把它设置为一个int到我的结构的ISNB部分,但它只是不断告诉我这是一个常数。任何帮助表示赞赏!

回答

2

您不能#包含数据文件。它会把它当作你的代码的一部分 - 它显然是无效的C++。

#include "Inventory.txt" 

你必须打开文件,并阅读ifstream之类的东西。

+0

你刚刚在我之前:) – Harry

+0

这是堆溢出的一半..找到你可以回答的问题,并首先到达那里。 – xaxxon

+0

非常感谢所有我需要做的事情就是删除#include“Inventory.txt”这一行,它完美地工作!我一整天都在工作,我不敢相信我没有想到这一点! – kingkunta