Zápis do souboru – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Zápis do souboru – C / C++ – Fórum – Programujte.comZápis do souboru – C / C++ – Fórum – Programujte.com

 

Robert
~ Anonymní uživatel
8 příspěvků
20. 3. 2015   #1
-
0
-

Ahoj, jsem tu úplně nový, začínám teprve s programováním vůbec.

Chci vytvořit program, který mi do souboru napíše pár jmen, ale v souboru se vždy ukáže až to poslední. Poradíte prosím, kde je chyba?

Zdroják:

#include <iostream>
#include<string>
#include <fstream>

using namespace std;

int main()
{
    cout << "Kolik osob si prejete zadat?"<< endl;
    int pocet;
    cin >> pocet;
    ofstream soubor1;
    do {
    pocet --;
    cout << "Zadejte sve jmeno" << endl;
    cout << endl;
    string jmeno;
    cin >> jmeno;
    

    soubor1 . open ("test2 . txt", ios :: out);
    soubor1 << jmeno;
    
    }
    while (pocet >= 1);
    soubor1.close ();
    return 0;
    
}

Nahlásit jako SPAM
IP: 185.47.220.–
KIIV
~ Moderátor
+43
God of flame
20. 3. 2015   #2
-
0
-

Kdyz otevres soubor pro zapis, tak se defaultne vymaze

A ty oteviras soubor pokazdy, kdyz do nej chces zapsat jedno jmeno

Nahlásit jako SPAM
IP: 94.113.95.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kenvelo+2
Super člen
24. 3. 2015   #3
-
0
-

#1 Robert
 

Přidej ios::app je to připojení výstupů na konec souboru. To by mělo tvůj problém vyřešit.

Nahlásit jako SPAM
IP: 89.177.196.–
Díky bohu, že počítače vymysleli muži. Kdyby to byly ženy, tak binární soustavu reprezentují jedničky, nuly a "možná"
PiranhaGreg0
Stálý člen
25. 3. 2015   #4
-
0
-

#3 Kenvelo
Jako hotfix asi proč ne, ale když už dopředu zná počet jmen a C++ se teprve učí, tak bych šel spíše po té variantě otevírat soubor pouze na začátku, jak tu naznačil #2 KIIV

Nahlásit jako SPAM
IP: 109.81.210.–
PiranhaGreg0
Stálý člen
25. 3. 2015   #5
-
0
-

#1 Robert
Jinak by sis měl pohlídat, aby ke každýmu otevření streamu (souboru) proběhlo i jeho zavření. Zavíráš ho akorát jednou na konci. Kdyby ses na ten soubor koukl někdy v půlce programu, tak by byl pravděpodobně stejně prázdnej...

Šlo by to celý řešit třeba takto 

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

const char * filename = "test.txt";

int main(void) {
	int pocet;

	cout << "Kolik osob si prejete zadat?" << endl;
	cin >> pocet;
	
	ofstream soubor(filename);
	string jmeno;

	if (!soubor) {
		cerr << "Soubor " << filename << " nelze otevrit." << endl;
		return 1;
	}
	
	while (cin && pocet--) {
		cout << "Zadejte sve jmeno: ";
		cin >> jmeno;
		soubor << jmeno << endl;
	}

	soubor.close();
	return 0;
}

Ještě upozorním, že 

cin >> jmeno;

načte pouze jedno slovo.

Nahlásit jako SPAM
IP: 109.81.210.–
Judegarek0
Newbie
25. 3. 2015   #6
-
0
-

   

#include <iostream>
#include <string>
#include <fstream>

void ZapisTextDoSouboru(const std::string& text, const std::string& cestaKSouboru)
{
    std::ofstream ofstr(cestaKSouboru.c_str());
    ofstr << text;
    ofstr.close();
}

std::string NacitejJmena()
{
    std::string posledni = "";
    std::string zadane;

    while (true)
    {
       std::cout << "Zadej jmeno. Ukonci zadanim prazdneho jmena." << std::endl;
       std::getline(std::cin, zadane);
       if (zadane.empty()) break;
       posledni  = zadane;
    }

    return posledni;
}

int main()
{
    const std::string jmeno = NacitejJmena();

    ZapisTextDoSouboru(jmeno, "jmeno.txt");

    return 0;
}
Nahlásit jako SPAM
IP: 109.73.212.–
Ježíš zaplatil za naše hříchy a tím nás zachránil od věčné smrti a zatracení. Čtěte bibli, napravte se. Zde zdarma v češtině: http://bible21.cz/wp-content/uploads/2010/12/BIBLE21.pdf
ondrej39+1
Věrný člen
25. 3. 2015   #7
-
0
-

#6 Judegarek
Trošku zbytečný cyklus ve funkci načtení jmen, když ti to nakonec stejně vrátí jedno jméno, ne?

Nahlásit jako SPAM
IP: 195.113.207.–
Inject all the dependencies!
Judegarek0
Newbie
25. 3. 2015   #8
-
0
-

Tak jsem pochopil zadání. Že chce uložit až poslední jméno.

Nahlásit jako SPAM
IP: 109.73.212.–
Ježíš zaplatil za naše hříchy a tím nás zachránil od věčné smrti a zatracení. Čtěte bibli, napravte se. Zde zdarma v češtině: http://bible21.cz/wp-content/uploads/2010/12/BIBLE21.pdf
ondrej39+1
Věrný člen
25. 3. 2015   #9
-
0
-

#8 Judegarek
AAha, máš pravdu. Docela divný zadání.

Nahlásit jako SPAM
IP: 195.113.207.–
Inject all the dependencies!
PiranhaGreg0
Stálý člen
25. 3. 2015   #10
-
0
-

Já to naopak chápu tak, že tam chce mít všechny...

Chci vytvořit program, který mi do souboru napíše pár jmen.

Ale v souboru se vždy ukáže až to poslední. Poradíte prosím, kde je chyba?

Nahlásit jako SPAM
IP: 109.81.210.–
25. 3. 2015   #11
-
0
-

Chci vytvořit program, který mi do souboru napíše pár jmen.

Dá se to chápat ještě jinak: jména mají být 2 ( = pár). Ale podle čeho se do páru vyberou ....   

hu

Nahlásit jako SPAM
IP: 2001:67c:1222:800:b57e:b5...–
peter
~ Anonymní uživatel
4014 příspěvků
25. 3. 2015   #12
-
0
-

A nepsal uz to KIIV?
Kdyz otevres soubor pro zapis, tak se defaultne vymaze
A ty oteviras soubor pokazdy, kdyz do nej chces zapsat jedno jmeno

 

  do {
    pocet --;
    cout << "Zadejte sve jmeno" << endl;
    cout << endl;
    string jmeno;
    cin >> jmeno;
    

    soubor1 . open ("test2 . txt", ios :: out); // otevri a smaz soubor
    soubor1 << jmeno; // uloz jmeno
    
    }
Nahlásit jako SPAM
IP: 2001:718:2601:1f7:dc1d:d7...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 117 hostů

Podobná vlákna

Zápis do souboru — založil Earl Cash

Zapis do souboru — založil Ondřej Karanský

Zapis do souboru — založil WoSSa

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý