Это не выход, который я просил - PullRequest
0 голосов
/ 04 июля 2011
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main() {
 ofstream w("d:/tester.txt");
 int f = 1;
 int s = 2;
 int t = 3;
 string x = "hello";
 w << f << endl << s << endl << t << endl << x ;
 w.close();

 ifstream r("d:/tester.txt");
 r >> x;
 cout << x << endl ;
 s = s + 10 ;
 r.close();

/* ofstream wa("d:/tester.txt");
wa << s;
wa.close();*/
}

Я всегда получаю вывод, равный 1 . Почему это так? Когда я спрашиваю строку, hello 1 отображается.

Ответы [ 5 ]

4 голосов
/ 04 июля 2011

Фактически, это - это вывод, который вы запрашиваете: вы читаете первый строковый маркер из файла. И это число «1», которое вы написали в первой строке файла.

Операторы потоковой передачи волшебным образом не анализируют ваш файл на предмет наиболее подходящего токена; они просто читают следующий доступный токен. И даже если бы они сделали, «1» был бы совершенно правильным выбором для строки.

1 голос
/ 04 июля 2011

Разве это не то, что вы ожидаете, или я что-то упускаю?

Вы помещаете значения «1», «2», «3», «привет» в поток, в таком порядке.Затем вы из этого потока в строку.Спецификация строки говорит, что все символы будут скопированы до первого допустимого пробела.Он увидит «1» как символ, а затем остановится на новой строке.Следовательно, вы получите строку, строку «1»;

1 голос
/ 04 июля 2011

Когда вы открываете поток, вы открываете его сверху вниз, это означает, что поток располагается в начале первой строки.

Вы писали:

w << f << endl << s << endl << t << endl << x ;

Итак, линии:

  1. F
  2. S
  3. т
  4. х

И f = 1, поэтому вы получаете то, что должны получать.

1 голос
/ 04 июля 2011

Первая строка tester.txt - это f, которая 1.

x - это строка, поэтому при чтении из tester.txt с использованием r>>x вы получаете первую строку, котораяis "1"

1 голос
/ 04 июля 2011

Вы сохраняете последовательно 1 2 3 в своем файле, а затем извлекаете первое значение из файла. Вы удивлены тем, что значение равно 1? Если вам нужны другие значения, вы должны вызывать поток в функциях более одного раза.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...