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

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

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

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

17.08.2012, 21:00. Просмотров 418. Ответов 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++):

Выскакивает ошибка Stack around the voriable 'text' was corrupted. Подскажите пожалуйста в чём ошибка - C++
Выскакивает ошибка Stack around the voriable 'text' was corrupted. Подскажите пожалуйста в чём ошибка. #include &lt;iostream&gt; #include...

В чём ошибка? - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main (){ const char*str1; cin.getline(str1,255); cout&lt;&lt;str1; ...

В чём ошибка? - C++
Здравствуйте, у меня проблемы... В консоли пишу 2, &quot;Для продолжения нажмите любую клавишу...&quot;. Я думаю что это из-за if (o == 2) в...

в чём ошибка 3 - C++
в чём ошибка 15 вариант Описат структуру с именим ZNAK, содержащую следующие поля: -фамилия,имя; -знак Зодиака; -дата рождения...

в чём ошибка - C++
В чём ошибка 5 задание 15 вариант Дана целочисленная прямоугольная матрица Определить: *номер первого из столбцов,содержаший...

в чём ошибка? - C++
Не могу разобраться в этом. Нужно составить программу вычисляющую в зависимости от знака(с) сумму/разность двух двузначных чисел(xx+yy) ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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
Псевдослучайный
1753 / 1096 / 72
Регистрация: 13.09.2011
Сообщений: 3,129
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
Псевдослучайный
1753 / 1096 / 72
Регистрация: 13.09.2011
Сообщений: 3,129
17.08.2012, 22:58 #6
Куда подробней-то? man getchar. Сделай ch интом и всё будет работать как надо.
alsav22
5417 / 4813 / 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(), при этом текст файла я не меняю.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.08.2012, 00:36 #9
Код можете показать, где вы это делаете?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.08.2012, 00:36
Привет! Вот еще темы с ответами:

В чём ошибка???((( - C++
Програма для нахождения площади интеграла #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; void main(){ double...

В чём ошибка? - C++
#include &lt;std_lib_facilities.h&gt; int func1(int a) { int chisla; for (int i=0; i&lt;10; i++) { cin &gt;&gt; chisla; if (chisla &gt;...

В чём ошибка? - 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;)...

в чём ошибка? - C++
Программа не дописанная. #include &lt;iostream&gt; // подключение библиотеки ввода-вывода #include &lt;conio.h&gt; // подключение библиотеки...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
18.08.2012, 00:36
Ответ Создать тему
Опции темы

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