C ++ сандары бар мәтіндік файлда оқу

Менде 16 түрлі бүтін сандар бар txt файл бар. Әрбір жолда 5 бүтін сан бар, мұнда файлдың алғашқы 4 жолы бар,

0 0 0 0 0

     

1 2 3 4 5

     

5 4 3 2 1

     

5 100 1000 10000 10500

Бір жолды бір уақытта оқып шығу керек, барлық 5 дюймді массивте сақтап, ең үлкен мәнді табыңыз. Мен мұны өзімнің әділдігіммен істей аламын. Маған қиындықтар туындаса, алдыңғы жолды оқып болған соң файлдағы келесі жолға өтеді.

  1. Мәтіндік файлдан бірінші жолды оқу

  2. массивтегі нөмірлерді сақтау

  3. алапты массив ішіндегі ең үлкен бүтінді қайтаратын функцияға жіберіңіз

  4. Жаңа нөмірге қайтарылған нөмірді орналастырыңыз, ол файлдың барлық 16 жолынан ең үлкен сандарды қамтиды

  5. файлдың келесі жолын оқыңыз

  6. алапты 16 int массивіне

  7. файлына жазыңыз

Мен 5-қадаммен қиындыққа кезігемін. Менің кодты іске қосқан сайын, ол әр жолы 1-жолды оқиды.

#include 
#include 
using namespace std;

int main()
{
    int n,i,j;
    int temp[5];
    //ask user
    cout<<"How many lines are in the file\n";
    cin>>n;
    int *array = new int[n];
    //open file
    ifstream inFile;
    inFile.open("input.txt");

    for(j=0;j<5;++i)
        {
            inFile >> temp[i];
            cout<<<" ";
        }
        cout<<"\n";
    }
    return 0;
}

Көріп отырғанымдай, менде әлі де максималды мән функциясы жоқ, мен нақты деректерді талдау үшін қозғалмас бұрын, файлды қалай оқып жүргенімді түзетуді қалаймын.

Иә, бұл үй тапсырмасының жобасы, бірнеше күн ішінде, бірақ менің мұғалім файлдағы оқылымды түсіндіре алмады және оқулықта түсініктеме оқыды (бұл істе көмектеспеген). Мен үй тапсырмасын орындамай-ақ үйренгім келеді, сондықтан қысқаша түсіндірме/жоғалтқан нәрсемнің мысалы жақсы.

0

3 жауаптар

istream :: getline() пайдалану арқылы бүкіл сызықты бірден басып алуға болар еді содан кейін алынған жолды талдайды. Содан кейін getline() және тағы да қоңырауларға қоңырау шалыңыз. Мүмкін, сіз нақ мінез-құлыққа ие болсаңыз да, сіз маған түсінікті емеспін.

1
қосылды
@Мен байланысқан құжаттың бетін тексеріңіз. Аргументтер кіріс жолына, оқуға арналған таңбалардың максималды санына және (қажет болса) пайдаланғыңыз келетін шектегішке ие арна жиымының көрсеткіші болып табылады.
қосылды автор Matt Phillips, көзі
@Wel meet strtok() . Бұл C жолын жеке сандарға бөлуге мүмкіндік береді (содан кейін бүтін санға айналдыру үшін atoi немесе біреуін қолданыңыз). Сипаттама сәл шатастырады, бірақ егер үлгі үлгі ретінде пайдалансаңыз, оны жұмысқа ала аласыз.
қосылды автор Matt Phillips, көзі
@Will Бұл дәл сізге жауап берді, call inFile.getline ()
қосылды автор Matt Phillips, көзі
1-жолды istream :: getline (0) деп санауға болады? немесе (1) немесе бұл функция тіпті мәнді қабылдамайды?
қосылды автор Will Gunn, көзі
рахмет, бірақ мен шынымен C ++-ды (С-ны жақсы түсінемін) бастаймын және мен өзімнің нөміріңізге қоңырау шалу жолын қалай табуға болатынын білмеймін.
қосылды автор Will Gunn, көзі
Көмектескеніңіз үшін рахмет және осы әдіс қалай таза болуы мүмкін екендігін көріп тұрмын, бірақ келесі жолды оқу үшін InFile-де айтатын кез-келген тәсіл туралы білесіз бе?
қосылды автор Will Gunn, көзі
Рахмет, сол кезде мен тырысамын.
қосылды автор Will Gunn, көзі

Сіздің кодыңыз маған жақсы жұмыс істейді. Файлды ашу кезінде мәселе бар деп ойлаймын, сондықтан олар баптандырылған кезде temp [] элементтерін шығарады. Оқу кезінде inFile күйін алуға тырысыңыз.

1
қосылды
Мен қазірдің өзінде істеп жатырмын. Менің соңғы бағдарламамда әрбір санды оқыған сайын шығармаймын, оны отладтау мақсаттары үшін бердім. Егер мен сізді түсінбейтін болсам, онда менде >> temp [i] бар; cout << temp [i] << «»;
қосылды автор Will Gunn, көзі
Мен уақытша инициализацияны алып, cout-ге қосылды \ n, сондықтан ол әр жолдың өздерінің желісінде өздерінің желісінде шығысын көрсетеді. шығу өзгерді, бірақ барлық 16 жол көрсетеді, 0 0 1880267544 32654 1
қосылды автор Will Gunn, көзі
Мен cout айналымын тексеруден кейін бірден қостық, иә олар бастапқы мәндер болып табылады, сондықтан менің мәселе файлда дұрыс оқылмау деп ойлаймын ба?
қосылды автор Will Gunn, көзі
Сізге көмектескеніңіз үшін рахмет, толық файл жолын енгіздім және бастапқы коды жұмыс істейді :)
қосылды автор Will Gunn, көзі
Сіздің шығарылымыңыз маған көп емес - бастапқы temp [] мәндері бірінші жолдың мазмұнына ұқсас. {1} ретінде temp [] мәнін инициализациялауға тырысыңыз, бұл шын мәнінде көп көрсететін болады.) UPD: егер бұл өзгеріс ештеңені өзгертпесе, мен сізді платформаларыңыз бен әзірлеуші ​​туралы ақпаратпен қамтамасыз етіңіз - бұл мінез қызықты болуы мүмкін .
қосылды автор Igor Shalyminov, көзі
Мен бұл бастаманың бастапқы мәндері емес екендігіне көз жеткізу үшін, ең басында тағы бір шығыс қосқан болар едім. Fscanf() функциясын қолданыңыз.
қосылды автор Igor Shalyminov, көзі
Дәлірек. Толық файл атауын көрсетіңіз немесе қатынас рұқсаттарын бекітіңіз.
қосылды автор Igor Shalyminov, көзі

Ал, сізге массив қажет деп ойламаймын. Тек желімен оқып, оны таңбалаңыз, әрқайсысына int (static cast) int (0-ден 9-ге дейінгі сандардағы ascii мәндерін қараңыз), және тікелей максималды түрде сақтаңыз. EOF-ге дейін қайталаңыз және сіз ең тиімді шешімді таба аласыз.

Сондықтан қадамдар болар еді

1) Уақытша жолды жариялау.

2) Жолды оқыңыз

3) кеңістікте белгі қойыңыз

4) Біріншісі - макс. Оқуды және салыстыруды жалғастырыңыз. Үлкенірек болса, мәндерді ауыстырыңыз

5) Аяғына дейін қайталаңыз

0
қосылды