<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.algopedia.ro/wiki/index.php?action=history&amp;feed=atom&amp;title=Instruc%C8%9Biuni_de_intrare%2Fie%C8%99ire_%C3%AEn_limbajul_C</id>
	<title>Instrucțiuni de intrare/ieșire în limbajul C - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.algopedia.ro/wiki/index.php?action=history&amp;feed=atom&amp;title=Instruc%C8%9Biuni_de_intrare%2Fie%C8%99ire_%C3%AEn_limbajul_C"/>
	<link rel="alternate" type="text/html" href="https://www.algopedia.ro/wiki/index.php?title=Instruc%C8%9Biuni_de_intrare/ie%C8%99ire_%C3%AEn_limbajul_C&amp;action=history"/>
	<updated>2026-04-13T01:13:00Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://www.algopedia.ro/wiki/index.php?title=Instruc%C8%9Biuni_de_intrare/ie%C8%99ire_%C3%AEn_limbajul_C&amp;diff=9415&amp;oldid=prev</id>
		<title>Cristian: /* Citirea din fișiere */</title>
		<link rel="alternate" type="text/html" href="https://www.algopedia.ro/wiki/index.php?title=Instruc%C8%9Biuni_de_intrare/ie%C8%99ire_%C3%AEn_limbajul_C&amp;diff=9415&amp;oldid=prev"/>
		<updated>2014-05-06T00:01:06Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Citirea din fișiere&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=== Tipul fișier ===&lt;br /&gt;
Limbajul C folosește tipul &amp;lt;tt&amp;gt;FILE&amp;lt;/tt&amp;gt; pentru a lucra cu fișiere pe disc. O variabilă de tip fișier se declară astfel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;FILE *fin;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Această variabilă va fi folosită în operațiuni pe fișiere.&lt;br /&gt;
&lt;br /&gt;
=== Deschiderea și închiderea fișierelor ===&lt;br /&gt;
Înainte de a putea citi sau scrie într-un fișier el trebuie mai întîi deschis. Pentru aceasta vom folosi funcția &amp;lt;tt&amp;gt;fopen&amp;lt;/tt&amp;gt;. Pentru a deschide un fișier pentru citire vom folosi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;fin = fopen( &amp;quot;problema.in&amp;quot;, &amp;quot;r&amp;quot; );&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pentru a deschide un fișier pentru scriere vom folosi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;fout = fopen( &amp;quot;problema.out&amp;quot;, &amp;quot;w&amp;quot; );&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Litera &amp;quot;r&amp;quot; vine de la &amp;quot;read&amp;quot; - a citi în engleză, iar litera &amp;quot;w&amp;quot; vine de la &amp;quot;write&amp;quot; - a scrie în engleză.&lt;br /&gt;
&lt;br /&gt;
Cînd am terminat operațiunile de citire, respectiv scriere, fișierele trebuie închise. Pentru aceasta vom folosi funcția &amp;lt;tt&amp;gt;fclose&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;fclose( fin );&lt;br /&gt;
fclose( fout );&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Atenție: închiderea fișierelor nu este opțională ci &amp;#039;&amp;#039;&amp;#039;este obligatorie&amp;#039;&amp;#039;&amp;#039;! Altfel riscați să pierdeți datele din fișiere.&lt;br /&gt;
&lt;br /&gt;
=== Citirea din fișiere ===&lt;br /&gt;
Pentru a citi numere dintr-un fișier vom folosi funcția &amp;lt;tt&amp;gt;fscanf&amp;lt;/tt&amp;gt;, astfel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;fscanf( fin, &amp;quot;%d&amp;quot;, &amp;amp;n );&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
unde &amp;lt;tt&amp;gt;fin&amp;lt;/tt&amp;gt; este o variabilă de tip fișier deschis anterior pentru citire, iar &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt; este o variabilă de tip &amp;lt;tt&amp;gt;int&amp;lt;/tt&amp;gt;. Remarcați caracterul &amp;lt;tt&amp;gt;&amp;amp;&amp;lt;/tt&amp;gt; din fața variabilei n. Al doilea parametru al funcției, șirul de caractere &amp;lt;tt&amp;gt;&amp;quot;%d&amp;quot;&amp;lt;/tt&amp;gt; conține descrierea tipului de variabile citite cu funcția &amp;lt;tt&amp;gt;fscanf&amp;lt;/tt&amp;gt;, respectiv &amp;lt;tt&amp;gt;d&amp;lt;/tt&amp;gt; de la &amp;lt;tt&amp;gt;decimal&amp;lt;/tt&amp;gt;. În cazul în care citim mai multe variabile acest șir va conține mai multe &amp;lt;tt&amp;gt;%d&amp;lt;/tt&amp;gt; &amp;#039;&amp;#039;&amp;#039;fără spații între ele&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;fscanf( fin, &amp;quot;%d%d%d&amp;quot;, &amp;amp;n, &amp;amp;x, &amp;amp;y );&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pentru a citi diverse tipuri de variabile vom folosi diverse codificări:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tip variabilă&lt;br /&gt;
!Format folosit (litere)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;char&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;%d&amp;lt;/tt&amp;gt; sau &amp;lt;tt&amp;gt;%c&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;short&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;%hd&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;int&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;%d&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;long long&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;%lld&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;double&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;%lf&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Scrierea în fișiere ===&lt;br /&gt;
Pentru a scrie numere într-un fișier vom folosi funcția &amp;lt;tt&amp;gt;fprintf&amp;lt;/tt&amp;gt;, astfel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;fprintf( fout, &amp;quot;Valoarea lui n este %d\n&amp;quot;, n );&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
unde fout este o variabilă de tip fișier deschis anterior pentru scriere, iar &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt; este o variabilă de tip int. Remarcați că de data aceasta &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt; nu mai este precedat de caracterul &amp;lt;tt&amp;gt;&amp;amp;&amp;lt;/tt&amp;gt;. Al doilea parametru al funcției este similar cu cel de la instrucțiunea fscanf, dar el poate conține nu numai simboluri de formatare ci și caractere de afișat, așa cum se vede și din exemplu. O altă diferență față de &amp;lt;tt&amp;gt;fscanf&amp;lt;/tt&amp;gt; este că valorile de afișat pot fi nu numai variabile ci și expresii. De exemplu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;fprintf( fout, &amp;quot;Suma dintre %d și %d este %d\n&amp;quot;, a, b, a + b );&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exemplu de folosire a fișierelor în limbajul C ===&lt;br /&gt;
Iată un exemplu complet de program care citește două numere a și b, cu a ≤ b și afișează toate numerele întregi cuprinse între a și b, cu un spațiu între ele și fără spațiu după ultimul număr:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
  FILE *fin, *fout;&lt;br /&gt;
  int a, b, i;&lt;br /&gt;
&lt;br /&gt;
  fin = fopen( &amp;quot;numere.in&amp;quot;, &amp;quot;r&amp;quot; );&lt;br /&gt;
  fscanf( fin, &amp;quot;%d%d&amp;quot;, &amp;amp;a, &amp;amp;b );&lt;br /&gt;
  fclose( fin );&lt;br /&gt;
&lt;br /&gt;
  fout = fopen( &amp;quot;numere.out&amp;quot;, &amp;quot;w&amp;quot; );&lt;br /&gt;
  fprintf( fout, &amp;quot;%d&amp;quot;, a );&lt;br /&gt;
  for ( i = a + 1; i &amp;lt;= b; i++ )&lt;br /&gt;
    fprintf( fout, &amp;quot; %d&amp;quot;, i );&lt;br /&gt;
  fprintf( fout, &amp;quot;\n&amp;quot; );&lt;br /&gt;
  fclose( fout );&lt;br /&gt;
&lt;br /&gt;
  return 0;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Citirea și scrierea caracterelor ===&lt;br /&gt;
Deși &amp;lt;tt&amp;gt;fscanf&amp;lt;/tt&amp;gt; și &amp;lt;tt&amp;gt;fprintf&amp;lt;/tt&amp;gt; pot citi/scrie caractere folosind descriptorul &amp;lt;tt&amp;gt;%c&amp;lt;/tt&amp;gt; această metodă nu este recomandată. În locul &amp;lt;tt&amp;gt;fscanf/fprintf&amp;lt;/tt&amp;gt; vom folosi perechea de funcții &amp;lt;tt&amp;gt;fgetc/fputc&amp;lt;/tt&amp;gt;, astfel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;c = fgetc( fin ); // citeste din fisierul fin un caracter si depune-l in variabila c&lt;br /&gt;
fputc( c, fout ); // scrie caracterul c in fisierul fout&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pentru a citi/scrie un șir de caractere vom chema în mod repetat &amp;lt;tt&amp;gt;fgetc/fputc&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Detectarea sfîrșitului de fișier ===&lt;br /&gt;
Uneori este necesar să citim caractere dintr-un fișier fără a ști în prealabil cîte caractere avem de citit. În aceste cazuri vom citi pînă la terminarea fișierului. Cum putem afla că fișierul s-a terminat? Atunci cînd fișierul s-a terminat funcția &amp;lt;tt&amp;gt;fgetc&amp;lt;/tt&amp;gt; returnează o valoare specială, codificată prin &amp;lt;tt&amp;gt;EOF&amp;lt;/tt&amp;gt; - end of file în engleză. În aceste situații va trebui ca în condiția din buclă să testăm dacă caracterul citit este egal cu &amp;lt;tt&amp;gt;EOF&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplu de citire/scriere a caracterelor în limbajul C ===&lt;br /&gt;
Iată un exemplu complet de program care citește un șir de caractere pîna la finalul fișierului și scrie același șir în fișierul de ieșire, convertind literele mici la litere mari:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
  FILE *fin, *fout;&lt;br /&gt;
  char c;&lt;br /&gt;
&lt;br /&gt;
  fin = fopen( &amp;quot;upper.in&amp;quot;, &amp;quot;r&amp;quot; );&lt;br /&gt;
  fout = fopen( &amp;quot;upper.out&amp;quot;, &amp;quot;w&amp;quot; );&lt;br /&gt;
  c = fgetc( fin );&lt;br /&gt;
  while ( c != EOF ) {&lt;br /&gt;
    if ( c &amp;gt;= &amp;#039;a&amp;#039; &amp;amp;&amp;amp; c &amp;lt;= &amp;#039;z&amp;#039; )&lt;br /&gt;
      c = c - &amp;#039;a&amp;#039; + &amp;#039;A&amp;#039;;&lt;br /&gt;
    fputc( c, fout );&lt;br /&gt;
    c = fgetc( fin );&lt;br /&gt;
  }&lt;br /&gt;
  fclose( fin );&lt;br /&gt;
  fclose( fout );&lt;br /&gt;
&lt;br /&gt;
  return 0;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristian</name></author>
	</entry>
</feed>