Čtení a následný zápis do souboru – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Čtení a následný zápis do souboru – C / C++ – Fórum – Programujte.comČtení a následný zápis do souboru – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
avalagne0
Newbie
2. 12. 2012   #1
-
0
-

Ahoj,
mám problém se zápisem upravených znaků do souboru.

Zadání příkladu je takové:
Napište program který:
1. načtete větu z klávesnice
2. uloží tuto větu do souboru data.txt
3. čte ze souboru data.txt jednotlivé znaky, malé znaky (a-z) převede na velké a postupně je ukládá do soboru VELKE.txt a zároveň je tiskne na obrazovku.

Můj kód:
 

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main()
{
	FILE *data, *VELKE;
	char nactenaVeta[100];
	char cteniZeSouboru[100];
	int i, znak;
	
	printf("Zadejte vetu pro nacteni: ");
	gets(nactenaVeta);
	data = fopen("data.txt", "w");
	fputs(nactenaVeta, data);	
	fclose(data);
	VELKE = fopen("VELKE.txt", "w");
	for(i = 0; i < strlen(nactenaVeta); i++)
	{		
		znak = fgetc(data);
		
		if(znak >= 97 && znak <= 122)
		{
			znak -= 32;
			fputc(znak, VELKE);
		}
	}
	fclose(VELKE);
	printf("Mala pismena byla nahrazena velkymi pismeny!\n");
	printf("Vysledek najdete v souboru VELKE.txt\n");

	system("pause");
	return 0;
}

Je mi jasné, že dělám chybu v části změny malých písmen za velká. Načtení a zápis do data.txt funguje. Ovšem do VELKE.txt se už nic nezapíše. Když to debuguju, tak je problém "znak = fgetc(data);"...

Díky za pomoc!

Nahlásit jako SPAM
IP: 194.228.13.–
Reklama
Reklama
Řešení
zlz
~ Anonymní uživatel
634 příspěvků
2. 12. 2012   #2
-
+1
-
Zajímavé
Vyřešeno Nejlepší odpověď

data otevřeš pro zápis a pak ho zavřeš. před čtením ho musíš znovu otevřít pro čtení. (nebo ho hned otevřít pro čtení i zápis, po zápisu nezavírat a před čtením se přesunout na začátek).

A kdo vás učí psát nicneříkající čísla místo znaků? Hele

if (znak >= 'a' && znak <= 'z')
{
	znak -= 'a' - 'A';
Nahlásit jako SPAM
IP: 80.188.216.–
avalagne0
Newbie
3. 12. 2012   #3
-
0
-

#2 zlz
Díky moc za postřehy. Vyřešil jsem to tedy takto:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main()
{
	FILE *data, *VELKE;
	char nactenaVeta[100];
	char cteniZeSouboru[100];
	int i, znak;
	
	printf("Zadejte vetu pro nacteni: ");
	gets(nactenaVeta);
	data = fopen("data.txt", "w+");   // vytvoření souboru pro zápis a čtení
	fputs(nactenaVeta, data);
	rewind(data);	// nastavení kurzoru v souboru na začátek
	VELKE = fopen("VELKE.txt", "w");
	for(i = 0; i < strlen(nactenaVeta); i++)
	{		
		znak = fgetc(data);		
		if(znak >= 'a' && znak <= 'z')
		{
			znak -= 'a' - 'A';
			fputc(znak, VELKE);
		}
		else
		{
			fputc(znak, VELKE);	// toto mi tam ještě chybělo (zápis všeho ostatního mimo znaky a až z)
		}
	}
	fclose(data);	// zavírám soubor až na konec
	fclose(VELKE);
	printf("Mala pismena byla nahrazena velkymi pismeny!\n");
	printf("Vysledek najdete v souboru VELKE.txt\n");

	system("pause");
	return 0;
}

To co jsem doplnil/předělal jsem okomentoval... Teď mi to funguje.

 Téma uzavírám, díky zlz!

Nahlásit jako SPAM
IP: 194.228.13.–
zlz
~ Anonymní uživatel
634 příspěvků
3. 12. 2012   #4
-
+1
-
Zajímavé

Nemusel jsi přidávat else. Stačilo ten fputc dát ven z toho ifu.

Nahlásit jako SPAM
IP: 80.188.216.–
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, 67 hostů

Moderátoři diskuze

 

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