Первая проблема, которую я заметил, когда я посмотрел на свой коде была недостающая точкой с запятой ;
после
myfile >> string1
, но это просто ошибка синтаксиса.
Цикл while, который вы пытаетесь использовать, будет оценивать только в том случае, если оба условия истинны, потому что вы используете оператор &&
.
Как @sftrabbit сказал оператор извлечения >>
в C++ оставляет символ новой строки \n
во входном буфере, а затем, когда вы пытаетесь ввести
std::getline(myfile, string2) && myfile >> int1
Первое условие std::getline(myfile, string2)
не имеет проблем с получением новый символ линии и будет оценивать значение true, но тогда второе условие myfile >> int1
будет оцениваться как false, потому что оно получит символ (ы), когда ожидает целое число. Вот почему цикл while не хочет выполнять.
Вы можете легко исправить эту проблему при изменении оператора извлечения в myfile >> string1
с getline(myfile, string1);
, потому что getline оставит пустой буфер ввода.
Но тогда у вас будет другая проблема. Цикл while будет выполняться только один раз, потому что во входном буфере остается \ n, поэтому вам понадобится myfile.ignore(numeric_limits<streamsize>::max(), '\n');
.
Ваш окончательный код должен выглядеть следующим образом:
int main()
{
ifstream myfile;
string string1;
string string2;
int int1;
myfile.open("filename.txt");
getline(myfile, string1);
while(getline(myfile, string2) && myfile >> int1)
{
myfile.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "read string " << string2 << " and int " << int1 << endl;
}
return 0;
}
Я надеюсь, что это поможет.
Итак ... вы хотите получить значение из каждой строки в переменной? – aldo
yeh каждая строка - это переменная, некоторые из которых являются int, некоторые являются строками – Edd