2016-04-04 10 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; 
} 

私は私のソースファイルと同じフォルダ内のファイルの読み取りを持っているが、私は、問題を引き起こしているかわからないです:私のコードでは、私はこのようなルックスを使用しています。ファイル内の私の読み取りがまさにこれです:ファイルの最初の行を取ると私の構造体のISNBセクションにintとしてそれを設定することになって、それはちょうどそれが一定である私に言って続けている

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 

。どんな助けもありがとう!

答えて

2

データファイルを#includeすることはできません。それはあなたのコードの一部のようにそれを扱います - そして、それは明らかに有効なC++ではありません。

#include "Inventory.txt" 

あなたは、ファイルを開いてはifstreamのようなもので、それを読まなければなりません。

+0

あなたは私の前にちょうど来ました:) – Harry

+0

これはスタックのオーバーフローの半分です。あなたが答えることができる質問を見つけ、まずそこに行きます。 – xaxxon

+0

#include "Inventory.txt"行を削除するだけで何とかやったことがありました。私は一日中働いていて、私はそれを考えなかったとは信じられません! – kingkunta