редактировать: РАЗРЕШЕНО.Переместил ins >> val
на предшествующий цикл, затем поставил ins.fail()
в качестве условия.Я не совсем уверен, почему это помогло, но это помогло, и я с удовольствием буду двигаться вперед.
Оригинальный пост:
У меня проблема с кодом ниже.По какой-то причине он читает в file.txt
и возвращается так же хорошо, но istream читает ввод, как если бы файл был пустым.Для справки, я работаю в Xcode.Я пытался поиграть со схемой, но ничего не получается.Я просто не понимаю, как он успешно читает в файле (я проверяю часть кода ...
и он говорит, что файл был успешно открыт), но пока не извлекает ни один из входных данных.
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream inFile;
inFile.open("file.txt");
// There exists a class called Position that isn't important for
// this but just clarifying
Position pos;
pos.read(inFile);
return 0;
}
void read(istream& ins) {
int val;
char discard;
while (!(ins >> val)) {
ins.clear();
ins >> discard;
}
}
Я относительно новичок в этом, кодирую только около 6 месяцев.Буду очень признателен за любые объяснения.Спасибо, ребята!
edit: цель этого кода - получить входные данные из файла в виде целых чисел.Если на входе есть что-то отличное от int
, цикл вернется в нормальное состояние и получит не-int как char
.Меня не волнует тот факт, что фактический текст файла, похоже, исчезает.Код был предоставлен в первую очередь для небольшого контекста.
Извинения за отсутствие знакомства со стеком!
edit2: Если я запускаю цикл следующим образом:
while (!(ins >> val)) {
ins.clear();
ins >> discard;
cout << discard;
}
Это входит в бесконечный цикл, потому что нет входных данных из файла.Не совсем уверен, как я мог бы показать I / O для этого, так как проблема в том, что нет никакого ввода и, следовательно, нет вывода.Когда я тестирую, он просто работает, работает и работает, пока я не остановлю его.Фактический файл .txt НЕ пуст, но он как-то обрабатывается так, как будто он есть.
edit3: добавление еще нескольких строк в качестве попытки выяснить, что именно происходит.
Спасибоеще раз!