2013-12-02 2 views
1

C++ Привет щедрых людей StackExchange,строковые значения не соответствующие

Я работаю с C++, и я, казалось, запустить в ошибку, не будучи в состоянии соответствовать два значения строки правильно. У меня есть код в основном:

/** 
* Author: Kevin Hill 
* Assignment: Project5 
* Description: VehicleDB 
**/ 

#include <iostream> 
#include <string> 
#include <fstream> 
#include <stdlib.h> 
#include "Vehicle.h" 
//#include "Truck.h" 
//#include "Car.h" 

using namespace std; 

bool checkLine(string, string); 

int main(int argc, char const *argv[]) 
{ 

    string fileName; //This is the file name 
    //Vehicle array 
    ifstream file; //Instantiate file 
    string sLine; 
    Vehicle **vehArr; 

    //Tell user to enter data 
    cout << "Enter the file name: "; 
    cin >> fileName; 
    file.open(fileName.c_str()); 
    if(!file.is_open()){ 
     cerr << "The file is not there" << endl; 
     return 1; 
    } 


    //Get first line of file to determine size of vehArr  
    for (int i = 0; !file.eof(); ++i) 
    { 
     if (i == 0){ 
      getline(file, sLine); 
      break; 
     } 
    } 

    int arrSize = atoi(sLine.c_str()); 
    vehArr = new (nothrow) Vehicle*[arrSize]; 
    string truck = "truck"; 
    string car = "car"; 
    while(!file.eof()){ 
     getline(file, sLine); 
     string stuff = sLine; 
     checkLine(stuff, car); 
    } 

    // Test add Truck and Car objects 
    // vehArr[0] = new Car(file); 
    // vehArr[1] = new Truck(); 

    string theLine = ""; 

    // checkLine("one", "one"); 

    // cout << "Beginning loop" << endl; 

    // for (int i = 0; !file.eof(); ++i){ 
    // getline(file, theLine); 



    // // if(theLine == "car"){ 
    // // vehArr[i] = new Car(file); 
    // // i++; 
    // // } 
    // // if (theLine == "truck"){ 
    // // vehArr[i] = new Truck(file); 
    // // i++; 
    // // } 
    // // if (i == arrSize){ 
    // // break; 
    // // }  
    // } 

    return 0; 
} 

bool checkLine(string one, string two){ 

    // if (one == two) 
    // { 
    // /* code */ 
    // } 



    if (one == two) 
    { 
     cout << "It's a " << two << endl; 
    } 
    // cout << one << endl; 
    // cout << two << endl; 

    return true; 
} 

Как вы можете видеть, я комментировал код, чтобы избавиться от всех вещей, что это не важно для моей проблемы. Когда я читаю свой файл, я стараюсь сделать совпадение со всеми линиями, равными автомобилю. Это должно сработать, потому что я старался, чтобы все линии были одинаковыми, и это сработало, но только с одинаковыми линиями car просто не получилось. Я сейчас застрял в этом.

Это текстовый файл, он читает из:

5 
car 
11111 
Ford 
Fusion FWD 
Red 
24999.00 
3 
AC 
795.00 
XM 
295.00 
Leather Seats 
495.00 
20 
28 
car 
22222 
Volvo 
V70 FWD 
White 
42999.00 
2 
Child Seats 
198.00 
17" wheels 
698.00 
14 
22 
car 
33333 
Honda 
Accord 
Silver 
19999.00 
1 
Tinted Windows 
175.00 
22 
31 
truck 
44444 
Freightliner 
FLD SD 
Red 
119999.00 
1 
Detroit Diesel Series 60 
4999.00 
10 speed manual 
455 
truck 
55555 
Mack 
TerraPro Cabover MRU612 
White 
125000.00 
1 
Dual Air Brake System 
6000.00 
8 speed manual 
325 

Это необходимо для того, чтобы я на самом деле выполнить свое задание, но я не могу понять, как это исправить. Пожалуйста, помогите мне.

+1

Примечание: см это: (! File.eof()) 'а'? Теперь прочтите следующее: [Почему iostream :: eof внутри условия цикла считается неправильным?] (Http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) , Затем рассмотрите, как * каждый * 'std :: getline()', который вы вызываете, должен быть проверен в условном выражении. – WhozCraig

+0

Является ли намеренным, чтобы функция 'checkLine()' возвращалась истинно все время, независимо от того, равны ли строки? –

+0

Ничего себе, это сработало хорошо. Большое спасибо чуваку. – Kivo360

ответ

1

Благодарю WhozCraig за предоставленную мне ответ. Вероятно, произошла ошибка индексирования, потому что я использовал! File.eof() вместо file >> data.

Так вот была небольшая разница код:

string truck = "truck"; 
string car = "car"; 
//Old version 
while(!file.eof()){ 
    getline(file, sLine); 
    string stuff = sLine; 
    checkLine(stuff, car); 
} 

string data; 
while(file >> data){  
// cout << data << endl; 
checkLine(data, car); 
} 
Смежные вопросы