Мне нужно сделать такую штуку: считать с консоли какую-то информацию, потом переместить курсор вначало, и еще раз ее считать, можно ли это сделать с помощью cin/scanf?
Например, для файла это можно сделать примерно так. T.е. если в файле inp.txt находится: 4 1 2 3 1, то первый цикл считает это, in.clear();
очистит флаги, in.seekg(ios::beg);
установит курсор в начало файла, второй цикл снова считает эти числа, и на экране будет:
X = 1
X = 2
X = 3
X = 1
как тоже самое проделать для консоли?
http://www.cplusplus.com/reference/clibrary/cstdio/rewind/ Перемещает каретку в начало.
а разве эта ф-я не для работы с файлом?
rewind(stdin); прекрасно работает.
тыц это у меня нифига не работает, ждет еще ввода
можете показать код, который прекрасно работает?
Такой код работает здесь в запуске. Я думал консоль от стандартного ввода на джаджах не отличается.
Насколько я знаю, на джаджах ввод/вывод перенаправляется с консоли на файлы. То есть программа думает, что работает с консолью, но снаружи ей подсовывают файл и говорят, что это консоль.
это врядли, когда из файла, обычно из файла и есть.
да и вообще, хотел бы узнать именно как это сделать в консоли, где бы то ни было, хоть локально, хоть в джаждах
Там неправда.
О_о? а как это работает (точнее, у меня как раз таки не получается сделать, чтобы это работало)?
Да, действительно не работает, я думал с консолью можно обращаться точно так же, как и с файлами. Более того, ни
freopen("CON", "r", stdin);
не начинает читать уже выведеную информацию из потока, ниfseek(stdin, SEEK_SET, 0);
. Как в первом, так и во втором случае поток ждет ввода заново. Складывается впечатление, что так действительно нельзя сделать, с потоками в стиле С.Стандартные потоки лучше рассматривать именно как потоки, а не файлы — ведь они могут быть связаны с объектами, которые не поддерживают операции позиционирования, например, терминал или канал (pipe). Эти объекты позволяют считывать или записывать данные, но не более того — для них не определено такое понятие, как текущая позиция, и они наверняка не хранят все данные, которые через них прошли.
Вместо этого можно считать данные в буфер/массив и пройтись два раза по этому массиву.