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

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

Войти
Регистрация
Восстановить пароль
 
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
#1

Почему правильно работает код? - C++

03.04.2013, 09:05. Просмотров 295. Ответов 4
Метки нет (Все метки)

В первом файле 5 слов, во втором - 10.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    FILE *f1, *f2;
    f1 = fopen("1.txt", "r");
 
    char temp[20];
 
    int count1 = 0;
    while(!feof(f1)) // количество слов в первом файле
    {
        fscanf(f1,"%s", temp);
        ++count1;
    }
    printf("count1 = ");
    printf("%d%c", count1, '\n');
    fclose(f1);
 
    f2 = fopen("2.txt", "r");
 
    int count2 = 0;
    while(!feof(f1)) // количество слов во втором файле
    {
        fscanf(f2,"%s", temp);
        ++count2;
    }
    printf("count2 = ");
    printf("%d%c", count2, '\n');
 
    fclose(f2);
 
    return 0;
}
При подсчёте количества слов во втором файле, выход из while() по достижению конца файла потоком, связанным с первым файлом, который уже закрыт. Тем не менее, подсчёт верный.
0
Миниатюры
Почему правильно работает код?  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2013, 09:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему правильно работает код? (C++):

Задача на рекурсию - почему вроде бы ошибочный код внутри работает правильно? - C++
Изучаю учебник C++, решаю задачки в конце глав. В одной задачке надо было написать рекурсивную функцию, получающую в качестве...

Не могу понять почему не работает (или правильно не работает) - C++
#include &lt;iostream.h&gt; #include &lt;conio.h&gt; #define N 5 #define M 3 void main() { int a; int i,j; cout&lt;&lt;&quot;nachalnya...

Почему работает не правильно??? - C++
// kjh.cpp: определяет точку входа для консольного приложения. // #include &quot;stdafx.h&quot; #include &lt;iostream&gt; void f(void); ...

Почему работает не правильно? - C++
Не могу понять почему эта простенькая программка не работает как надо,подскажите почему?К примеру я ввожу 12+7= и мне выдаёт 127==? //...

Почему программа не работает правильно? - C++
У меня почему-то не корректно отображаются надписи в консоли.

почему-то не правильно работает(файлы) - C++
Данный файл целых чисел. Создать новый файл, который содержит те же элементы, что и исходный файл,но в обратном порядке НО ПОЧЕМУ-ТО...

4
solar_wind
756 / 747 / 42
Регистрация: 06.07.2009
Сообщений: 2,969
Завершенные тесты: 1
03.04.2013, 09:11 #2
Ну у меня такое предположение:
Здесь выделяется память под описатель файла:
f1 = fopen("1.txt", "r");
Здесь память очищается, но f1 не обнуляется, а продолжает указывать на ту же область памяти:
fclose(f1);
Здесь выделяется память под второй описатель файла, но так как память под f1 уже свободна, используется тот же блок памяти:
f2 = fopen("2.txt", "r");

В итоге f1 и f2 указывают на одну и ту же память, поэтому у тебя все работает. Чуть изменятся условия или программа и все работать перестанет....
1
Croessmah
Эксперт CЭксперт С++
13420 / 7574 / 855
Регистрация: 27.09.2012
Сообщений: 18,658
Записей в блоге: 3
Завершенные тесты: 1
03.04.2013, 09:16 #3
Ну так f1 закрыли - ресурсы освободили.
Опять сделали fopen - получили тот же идентификатор, что до этого освободили.
Получается, что f2==f1

Добавлено через 1 минуту
Например, попробуйте открыть так:

C++
1
2
3
4
fclose(f1);
f3=fopen("c:\\cpp\\1.txt", "r");
f2 = fopen("c:\\cpp\\2.txt", "r");
fclose(f3);
1
anmartex
...
1706 / 1199 / 496
Регистрация: 12.02.2013
Сообщений: 1,978
03.04.2013, 09:16 #4
alsav22, а вы в строчке 22 воткните следующее:
C
1
printf("%x %x\n", (unsigned)f1, (unsigned)f2);
Я думаю всё станет на свои места. :-)
1
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
03.04.2013, 09:23 #5
Цитата Сообщение от alsav22 Посмотреть сообщение
При подсчёте количества слов во втором файле, выход из while() по достижению конца файла потоком, связанным с первым файлом,
Как только ты закрыл файл, поток от него отвязался.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.04.2013, 09:23
Привет! Вот еще темы с ответами:

Не могу понять почему программа работает не правильно! - C++
Задание: Программа находит в строке 1 символ который не входит во 2 заданную строку. Помогите исправить ошибку. ...

Почему при умножении на 0, программа работает правильно? - C++
Операции ввода, такие, как cin, должны уметь преобразовывать последо- вательность символов в число. Напишите программу, которая позволяет...

Почему алгоритм unique_copy не правильно работает с итераторами потоков? - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;iterator&gt; #include &lt;string&gt; #include &lt;algorithm&gt; #include &lt;vector&gt; using...

Не правильно работает код - C++
Программа должна искать слово и подсчитать сколько раз они встречаеться в текст. вот мой код: #include &lt;iostream&gt; #include &lt;string&gt; ...


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

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

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