ինչպես ավարտել տողը c ++ - ով


պատասխանել 1:

Մի մոտեցում, որը կարող է լինել հարցի իրական պատասխանը, օգտագործել tellg () ֆայլի չափը որոշելու համար, ապա հետևել, թե քանի նիշ է կարդացել և կանգ առնել, երբ ֆայլի լրիվ չափը կարդացել է:

Ես գտա EOF- ի օգտագործման մի խնդիր այն էր, որ ես հավատում եմ, որ EOF- ը չի վերադարձվում, քանի դեռ չփորձես կարդալ առաջին նիշը վերջին նիշից հետո: Ես նաև կխնդրեի թեմային, թե որն է EOF- ը որոշելու լավագույն միջոցը, եթե ձեր տվյալները միատարր չեն, ես վերցրել եմ մի շարք առցանց տեխնիկական ակնարկներ ՝ կարդալով թե՛ առևտրի փոխանակման հաղորդագրությունները, թե՛ MP4- ը, և երկու դեպքում էլ կան տողեր և ամբողջ թվեր խառնված երկուական ֆայլերը, այնպես որ դուք վերջում կունենաք ifstream :: read (char *, չափ) բազմաթիվ զանգեր, որոնք անհրաժեշտ է կարգավորել բոլորին, որպեսզի EOF- ը գործ ունենա այն գործի հետ, երբ ֆայլը ամբողջական չէ: IE- ն վերջում չունի ամբողջական «գրառում»: Այս մոտեցման առաջարկման պատճառն այն է, որ երբ վերջին նիշը կարդացվի, դուք իսկապես կարող եք որոշել EOF- ը `համեմատելով ֆայլի ամբողջ չափի հետ, որտեղ, ինչպես EOF- ի դեպքում, պետք է վերադառնալ այդ վերջին նիշը:

Լավագույն լուծումը, որը ես կարող եմ ունենալ այս պահին, փաթաթման գործառույթ ստեղծելն է, որը կատարում է ifstream :: read () ը և բացառություն է տալիս eof ազդանշանին: Սա նշանակում է, որ թե՛ տողը կարդում է, թե՛ ամբողջը կարդում է, և եթե float կարդալու դեպքում բոլորը կանչում էին փաթաթման գործառույթը, որը պաշտպանված էր բացառությամբ EOF- ի նետման կամ ֆայլի լրիվ չափի ընթերցման:


պատասխանել 2:

Օգտագործելով հոսքերը.

Տողի վերջը - std :: getline

Ֆայլի վերջ - օգտագործեք std :: basic_istream :: rdbuf ստեղն ստանալու համար և գրեք այն std :: stringstream, ապա ստացեք տողը

Օրինակներ.

#ներառում #ներառում #ներառում int հիմնական (int argc, char ** argv){ եթե (argc <2) { std :: cerr << "Փաստարկների անվավեր քանակ" << std :: endl; վերադարձ 1; } std :: string fileName {argv [1]}; std :: ifstream մուտքագրում (fileName); եթե (! input.good ()) { std :: cerr << "Չհաջողվեց բացել ֆայլը" << std :: endl; } std :: լարային գիծ; std :: getline (մուտք, տող); std :: cout << "Առաջին գիծ." << տող << std :: endl; մուտքագրում. որոնում (0); std :: տողի պարունակությունը; { std :: ostringstream ելք; ելք << input.rdbuf (); բովանդակություն = ելք.ստր (); } std :: cout << "Ամբողջական պարունակությունը ՝" << բովանդակությունը << std :: endl; վերադարձ 0;}

պատասխանել 3:

Սերգեյ ubուբկովի նման, եթե ուզում եք տող կարդալ, օգտագործեք ֆունկցիա, որը դադարում է, երբ ֆայլն ավարտվում է: Օրինակ, դա կարելի է անել այնպես, ինչպես այդպես է:

#ներառում #ներառում օգտագործելով namespace std; int հիմնական (){ լարային s; while (cin >> s) { cout << s << endl; }վերադարձ 0;}

Մինչև տողի ավարտը կարդալու համար օգտագործեք std :: getline:

#ներառում #ներառում օգտագործելով namespace std; int հիմնական (){ լարային s; while (std :: getline (std :: cin, s)) { cout << s << endl; }վերադարձ 0;}

պատասխանել 4:

Ֆայլը C ++ լեզվով մինչև վերջ կարդալու համար կարող եք օգտագործել ցանկացած մուտքագրման գործառույթ, մինչև այն կեղծ վերադառնա:

#ներառում #ներառում int հիմնական (){ std :: ifstream f ("thefile.txt");std :: վեկտոր v; համար (int n; f >> n;) v.push_back (n);}

Կենդանի ցուցադրություն (թողարկմամբ):

Coliru հեռուստադիտող

Կամ, ավելացնելու համար, կարող եք ձեր ֆայլը մեկնաբանել որպես ամբողջ թվերի հաջորդականություն և պարզապես փոխել մեկ հաջորդականությունը մյուսին.

#ներառում #ներառում #ներառում int հիմնական (){ std :: ifstream f ("thefile.txt");std :: վեկտոր v {std :: istream_iterator (զ), {}};}

Կենդանի ցուցադրություն (թողարկմամբ):

Coliru հեռուստադիտող

Հ.Գ. Ուրախ եմ, որ ոչ ոք դրանից որևէ մեկը չի տեղադրել մինչդեռ (! File.eof ()) անհեթեթություն


պատասխանել 5:

Օգտագործեք std :: ifstream :: read (char * s, streamsize n):

Ահա մի լավ տեղեկատու էջ ՝ կոդերի օրինակով և ամեն ինչով.

istream :: read - C ++ տեղեկանք