Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [c++]Потоковое чтение из файла


Автор: dimafeng 25.10.2008, 12:12
Задача:
Считать числа из файла, разделенные пробелом, посчитать их НОД и вывести количество чисел в файле

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

Код

#include <iostream>
#include <fstream>

using namespace std;

int ae(int a, int b)
{
    a=abs(a);
    b=abs(b);

    while (a!=b)
        (a>b)?a=a-b:b=b-a;
    return b;
}

int main()
{
    int pr,nxt,t=1;
    ifstream in("in.txt");
    
    if (!in) {
        cout << "Cannot open input file.\n";
        return 1;
    }


    in >> pr;
    
    while (!in.eof())
    {
        in>>nxt;
        t++;
        pr = ae(nxt,pr);
    }
    
    in.close();

    ofstream out("out.txt");
    if(!out) {
        cout << "Cannot open output file.\n";
        return 1;
    }

    out << pr << " " << t ;
    out.close();

    return 0;
}

Автор: volvo877 25.10.2008, 13:37
Цитата(dimafeng @  25.10.2008,  11:12 Найти цитируемый пост)
Какая проверка должны быть?

Вот такая:
Код

    while (in>>nxt)
    {
        t++;
        pr = ae(nxt,pr);
    }

Автор: dimafeng 26.10.2008, 22:07
volvo877, 
Я рассматривал этот вариант, но когда в конце исходного файла 0(==false), то это все виснет. 

Автор: dimafeng 27.10.2008, 15:18
Помогите кто-нибудь.

Автор: Evjeny 27.10.2008, 15:47
Код

while ((!in.eof())&&(in >> nxt))
{
       t++;
       pr = ae(nxt,pr);
}

Автор: dimafeng 27.10.2008, 16:05
Evjeny, это тоже виснет на файле с 0 в конце

Автор: Evjeny 27.10.2008, 16:18
dimafeng, конечно программа будет виснуть. Посмотри внимательно на функцию int ae(int a, int b). smile

Автор: dimafeng 27.10.2008, 16:28
Evjeny, Да!! Спасибо! не подумал...Работает.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)