2013-12-08 3 views
0

все работает, когда я пытаюсь прочитать из файла, когда я удаляю младшего из имени. Как я могу прочитать фамилию Smith Jr., используя этот входной файл? Я не могу использовать get line, потому что читает всю строку как полное имя, но как я могу прочитать имя и фамилию, разделенные с именем Smith Jr., вместо того, чтобы вызывать ошибки?Чтение первого и последнего имени из файла

Intro To Computer Science c++ 
SAL 343 
JHG 344 
John Adams 
111223333 100 87 93 90 90 89 91 
Willy Smith 
222114444 90 73 67 -77 70 80 90 
Phil Jordan 
777886666 100 80 70 -50 60 90 100 

Когда я удалить младший из входного файла он читает фамилию Смит, но когда я устанавливаю его как Смит-младший не прочитал его как фамилию и вызывает огромные ошибки печати. Как я могу прочесть фамилию Smith Jr, а не удалить ее? спасибо вот мое чтение функция

void Read_Student(Student & Temp , ifstream & fin){ 

    fin >> Temp.FirstName >> Temp.LastName ; 
    fin >> Temp.Id; 
    fin >> Temp.Quiz; 
    for (int i = 0 ; i < 6 ; i++) 
     fin >> Temp.Test[i]; 
    fin.ignore(10,'\n'); 
} 
int Read_List(Student & Temp,Student List[], int Max_Size) 
{ 
    ifstream fin; 
    int i = 0; 

    if (Open_File(fin)) 
    { 
     getline(fin, List[i].Course_Name); 
     getline(fin, List[i].Course_Id); 
     getline(fin, List[i].Course_Location); 
     Read_Student(List[i],fin); 
     while(!fin.eof()) 
     { 
      i++ ; 
      if (i > Max_Size){ 
       cout << "\nArray is full.\n" ; 
       break; 
      } 
      Read_Student(List[i],fin); 
     } 
    } 
    else 
    { 
     cout <<"\nBad file. Did not open. Program terminated.\n"; 
     exit(0); 
    } 
    return (i); 
} 

ответ

1
fin >> Temp.FirstName >> Temp.LastName; 

operator>>(istream&, string&) остановит извлекая, как только он попадает в пустое пространство. Однако вы хотите сохранить остальную часть строки в Temp.LastName. В этом случае используйте std::getline вместо:

fin >> Temp.FirstName; 
std::getline(fin, Temp.LastName); 
fin >> Temp.Id; 
/* ... snip ... */ 
+0

Это вызывает огромные ошибки, когда я это делал – user3078999

+0

Имеет смысл читать остальную часть строки, но она заканчивается чтением как Id не фамилия – user3078999

+0

Я получил его сейчас, я использовал get line и fin.ignore() благодаря помощь. – user3078999

0

Похоже, вы хотите обработать первое слово в качестве имени и остальных слов как LastName. Если это так, вы можете использовать getline для захвата целой строки, а затем измельчить линию (я бы рекомендовал stringstream для разбора отдельных слов).

В качестве альтернативы, если вы хотите иметь возможность анализировать имена и фамилии, которые являются несколькими словами, вы можете попробовать добавить «разделитель» между первым и последним именем - как запятую. Вы можете снова использовать getline для получения всей строки, а затем разделить между именами, используя запятую.

+0

Это звучит неплохо, но я никогда не использовал их раньше, поэтому не знаю, как они работают – user3078999

+0

Я получил его сейчас, я использовал get line и fin.ignore() за помощь. – user3078999

Смежные вопросы