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

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

Войти
Регистрация
Восстановить пароль
 
 
NaikoN
2 / 2 / 0
Регистрация: 01.05.2013
Сообщений: 109
#1

Подскажите с функцией scanf() - C++

19.05.2013, 11:23. Просмотров 756. Ответов 15
Метки нет (Все метки)

Я считываю данные из файла, данные целые числа, написал:
C++
1
while(scanf("%ld",&x))
так как не известно когда закончатся данные, но функция scanf() не прекращает работу когда достигает конца данных и просто программа зацикливается, как это можно исправить??? подскажите пожалуйста.
P.S. Когда писал так:
C++
1
while(cin>>x)
Все работает, но очень медленно, нужно использовать именно scanf() или как-то по возможности ускорить cin, раз в 10. Заранее спасибо за помощь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2013, 11:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Подскажите с функцией scanf() (C++):

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

Подскажите пожалуйста с функцией - C++
Хочу создать функцию, что бы она выводили минимум из 4 чисел, но она всегда выводит 1. Подскажите в чем моя ошибка, заранее спасибо. P.S....

структуры подскажите с функцией - C++
Ребята умы програмирования подскажите с функцией долбаюсь не могу никак дойти до ума задача такая: Предметная область - бухгалтерия...

Подскажите пожалуйста с функцией - C++
Здравствуйте. Задали создать функцию в которую передается три аргумента. после чего вычисляется две формулы, допусти х=a*b*c и y=(a+b)*c....

Подскажите с функцией kbhit() - C++
Подскажите как сделать что-бы функция kbhit() реагировала на нажатие определенной клавиши, например клавишу "q". Вот пример код, хочу что...

Проблемка с функцией gets(). Подскажите - C++
Проблема следующего характера: при первом проходе в цикле(i=0) функция store() работает корректно. При шаге i=1 и дальше строка...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
kalpakk
13 / 13 / 1
Регистрация: 02.07.2011
Сообщений: 62
19.05.2013, 12:31 #2
есть проверка конца файла?
NaikoN
2 / 2 / 0
Регистрация: 01.05.2013
Сообщений: 109
19.05.2013, 12:37  [ТС] #3
Нет, нету проверки конца файла, я думал цикл while() будет работать до конца фала, он так и работает если использовтать cin, но со scanf() он зацикливается.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.05.2013, 12:59 #4
Цитата Сообщение от NaikoN Посмотреть сообщение
Я считываю данные из файла
Где здесь чтение из файла? scanf() читает из стандартного потока ввода (cin тоже).
NaikoN
2 / 2 / 0
Регистрация: 01.05.2013
Сообщений: 109
19.05.2013, 13:04  [ТС] #5
Я просто не привел кусочек кода где данные считываются из файла.

Добавлено через 1 минуту
но вот он
C++
1
ifstream cin("input.txt");
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.05.2013, 13:04 #6
Цитата Сообщение от NaikoN Посмотреть сообщение
Я просто не привел кусочек кода где данные считываются из файла.
Привидите. Ясновидящих здесь нет.

Добавлено через 51 секунду
Цитата Сообщение от NaikoN Посмотреть сообщение
но вот он
И где здесь чтение из файла?
NaikoN
2 / 2 / 0
Регистрация: 01.05.2013
Сообщений: 109
19.05.2013, 13:07  [ТС] #7
Вот:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ifstream cin("input.txt");
    long int i,x,number,j,z[400000],arr=1,sum=0,zz[400000],max=-9999;
    cin>>number;
    while(cin>>x)//?? ??
    {
        if(x>number)
        {}
        else
        {
            z[arr]=x;
            //cout<<z[arr]<<" ";
            arr++;
        }
    }
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.05.2013, 13:14 #8
Цитата Сообщение от NaikoN Посмотреть сообщение
но вот он
C++
1
ifstream cin("input.txt");
Потоку для чтения из файла не нужно такое имя давать.

Добавлено через 6 минут
Массивы слишком большие. У меня переполнение стека выскакивает.
NaikoN
2 / 2 / 0
Регистрация: 01.05.2013
Сообщений: 109
19.05.2013, 13:18  [ТС] #9
Хорошо, я все это исправлю , но подскажите с функцией scanf() у меня с ней проблема
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.05.2013, 13:25 #10
В остальном должно работать. Только почему начально значение arr = 1, а не 0?

Добавлено через 1 минуту
Цитата Сообщение от NaikoN Посмотреть сообщение
Хорошо, я все это исправлю , но подскажите с функцией scanf() у меня с ней проблема
Для четния из файла есть функция fscanf(), но почему думаете, что она будет быстрее работать?

Добавлено через 4 минуты
Попробуйте так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    FILE *f;
    f = fopen("input.txt", "r");
    //ifstream cin("input.txt");
    long int i,x,number,j,z[400000],arr=1,sum=0,zz[400000],max=-9999;
    cin>>number;
    while(1)
    {
        fscanf(f, "%ld", &x);
        if (feof(f)) break;
        if(x>number)
        {}
        else
        {
            z[arr]=x;
            //cout<<z[arr]<<" ";
            arr++;
        }
    }
NaikoN
2 / 2 / 0
Регистрация: 01.05.2013
Сообщений: 109
19.05.2013, 13:30  [ТС] #11
Я где-то читал, что scanf() примерно в 10 раз быстрее cin, а мне нужночто данные быстро считывались из файла, поэтому выбрал scanf(). Как функции scanf() дать понять, что данные закончились?

Добавлено через 2 минуты
alsav22, спасибо попробую, потом скажу получилось или нет:-)
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.05.2013, 13:30 #12
Цитата Сообщение от NaikoN Посмотреть сообщение
Я где-то читал, что scanf() примерно в 10 раз быстрее cin, а мне нужночто данные быстро считывались из файла, поэтому выбрал scanf(). Как функции scanf() дать понять, что данные закончились?
Предыдущий пост посмотрите, я там код выложил.
NaikoN
2 / 2 / 0
Регистрация: 01.05.2013
Сообщений: 109
19.05.2013, 13:33  [ТС] #13
alsav22, уже увидел:-)
NaikoN
2 / 2 / 0
Регистрация: 01.05.2013
Сообщений: 109
20.05.2013, 16:27  [ТС] #14
alsav22, Спасибо Ваш код работает, но все равно данные считываются очень долго, можно как-то ускорить их считывание???
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.05.2013, 16:44 #15
Понятия не имею. Если только попробовать бинарный режим чтения\записи. Насколько это быстрее будет не знаю, только числа в файле должны быть записаны в бинарном режиме.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2013, 16:44
Привет! Вот еще темы с ответами:

Подскажите как воспользоваться функцией. - C++
Здрасте. В книжке Джесс Либерти &quot;Освой самостоятельно С++ за 21 день&quot;, 3е издание, на странице 159 есть пример программы работы с классами....

Подскажите пожалуйста с функцией ver 0.3 - C++
Написал функцию которая возводит любое число в любую степень (в отрицательную тоже) и столкнулся с проблемой. при возведении 2^20 выводится...

Проблемма с функцией,подскажите что не так - C++
#include &quot;stdafx.h&quot; #include&lt;iostream&gt; #include &lt;clocale&gt; #include &lt;cmath&gt; using namespace std; void input (double x,...

Подскажите пожалуйста с функцией работы с Датой - C++
Ув. программисты помогите доделать программу. Суть такова. Считываются данные с файла в матрицу (тип данных Стринг) в каждом рядке...


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

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

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