Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
#1

В чём ошибка? - C++

17.08.2012, 21:00. Просмотров 414. Ответов 8
Метки нет (Все метки)

Описание проблемы:
Открываю файл для чтения и записи. Записываю туда информацию. После этого, если:
1)я перевожу текущую позицию в начало, то все ok, вывод из файла правильной информации.
2)если, я не делаю 1), то при чтении из файла, я читаю какие-то символы 'H' с кодом -51, что это значит объясните пожалуйста.
3)Если файл кончился, т.е. достигнут конец, но продолжить чтении из него дальше, откуда будет браться информация?

Вот код

Добавлено через 21 секунду
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
FILE *fp;
 
    if((fp = fopen("namedg.txt","r+"))==NULL) puts("error1.\n");
    else puts ("good1.\n");
 
    char ch;
 
    while((ch = getchar()) != '$')
        cout << putc(ch,fp);
    
    
    while(!feof(fp)){
        ch = getc(fp);
        if(ch == EOF) cout << "NULL";
        cout << ch;
    }
    ch = getc(fp);
 
    if(ch == EOF) cout << "NULL";
    fclose(fp);
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2012, 21:00     В чём ошибка?
Посмотрите здесь:

В чём ошибка - C++
собственно вот. программа должна вывести логин, но не выводит его. по каким средствам можно заставить программу вывести логин #include...

В чём ошибка? - C++
Немогу понять где накосячил, после внесения данных программа зависает. Помогите пожалуйста.#include &quot;stdafx.h&quot; #include &quot;cstdlib&quot; ...

В чём ошибка? - C++
Начал писать класс: class TGame{ public: TGame(char *WorldFileName, char *TexturesFileName); void Render(); private: ...

В чём ошибка? - C++
Нужно написать программу через динамическое выделение памяти. #include &quot;stdafx.h&quot; #include &quot;iostream&quot; using namespace std; ...

В чём ошибка? - C++
#include &lt;iostream&gt; using namespace std; int main() { int N, i; cin &gt;&gt; N; int *arr = new int; for(int i = 0; i&lt;N;...

В чём ошибка? - C++
Здравствуйте! Хотел написать программу для смены пароля на тот что имеется в указаном файле но почему-то она не работает можете подсказать...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
17.08.2012, 21:12     В чём ошибка? #2
Если я правильно понял, то все три пункта задают один вопрос :
откуда берутся символы 'H', если считывание происходит после EOF-символа - так?
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
17.08.2012, 21:39  [ТС]     В чём ошибка? #3
Суть в том, что если я начинаю читать файл, после того как, туда записал информацию, и при этом не перевожу текущую позицию вначало, то я читаю из файла символы H? Но
1. Если и ввод и вывод используют один указатель на текущую позицию, то должен быть символ конца файла, но там H и выводится много H.
2.Если они использую разные указатели на текущую позицию, то там должен быть 1-ый символ из файла, но там опять H.
Хотелось бы очень понять, почему так происходит???

Добавлено через 4 минуты
И ещё самое странное. Пусть файл содержит текст "123".
При сбросе указателя на тек.позицию 3 байт (считаем с нуля) интерпретируется как конец файла. А если не сбрасывать этот указатель, то этот байт H.
Что такое?

Добавлено через 18 минут
Неужели, никто не знает как работает система ввода-вывода?
NoMasters
Псевдослучайный
1744 / 1087 / 71
Регистрация: 13.09.2011
Сообщений: 3,115
17.08.2012, 22:30     В чём ошибка? #4
В том, что getchar возвращает int, который этот код впихивает в char. EOF не влезает.
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
17.08.2012, 22:39  [ТС]     В чём ошибка? #5
Можете поподробнее или кинуть ссылку что почитать?
NoMasters
Псевдослучайный
1744 / 1087 / 71
Регистрация: 13.09.2011
Сообщений: 3,115
17.08.2012, 22:58     В чём ошибка? #6
Куда подробней-то? man getchar. Сделай ch интом и всё будет работать как надо.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.08.2012, 00:04     В чём ошибка? #7
Цитата Сообщение от bgm313 Посмотреть сообщение
И ещё самое странное. Пусть файл содержит текст "123".
При сбросе указателя на тек.позицию 3 байт (считаем с нуля) интерпретируется как конец файла. А если не сбрасывать этот указатель, то этот байт H.
Что такое?
Тут многое зависит от того, какими методами вы получаете информацию об этом. Как сбрасываете указатель? Какой, например, метод интерпретирует конец файла? Как вы определяете, что в первом и во втором случае интерпретируется одни и тот же байт?
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
18.08.2012, 00:11  [ТС]     В чём ошибка? #8
Цитата Сообщение от alsav22 Посмотреть сообщение
Тут многое зависит от того, какими методами вы получаете информацию об этом. Как сбрасываете указатель? Какой, например, метод интерпретирует конец файла? Как вы определяете, что в первом и во втором случае интерпретируется одни и тот же байт?

Функция, которая сбрасывает rewind().
По поводу интерпретации байта в обоих случаях (с rewind и без него) использую функцию ftell(), при этом текст файла я не меняю.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.08.2012, 00:36     В чём ошибка?
Еще ссылки по теме:

В чём ошибка? - C++
#include &lt;vcl.h&gt; #include &lt;conio.h&gt; #include &lt;iostream.h&gt; int main(int argc, char* argv) { int i,c,j,m,a; for(i=1;i&lt;100;i++) ...

в чём ошибка? - C++
не пойму в чём ошибка! :( выдаёт неправильное значение... Даны натуральное число n, действительное число х. Вычислить: ...

В чём ошибка? - C++
#include &lt;iostream.h&gt; #include &lt;fstream.h&gt; #include &lt;climits.h&gt; #include &lt;cstring.h&gt; unsigned arr, larr; bool...

В чём ошибка? - C++
#include &lt;std_lib_facilities.h&gt; int main() { setlocale(0, &quot;&quot;); cout &lt;&lt; &quot;Как дела? \n&quot;; string c; if (cin &gt;&gt; c == &quot;Хорошо&quot;)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.08.2012, 00:36     В чём ошибка? #9
Код можете показать, где вы это делаете?
Yandex
Объявления
18.08.2012, 00:36     В чём ошибка?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru