Linguaggio c getc

luca981
ciao.
vorrei fare un programma usando getc,
che legge l' imput di un file testo "righe.txt"
e lo restituisce a schermo "standard output"

questo programma con fgets funziona .

/*
char *fgets(char *s, int size, FILE *stream);
char *gets(char *s);
*/

#include
#include

#define ROW_SIZE 200
#define FILE_NAME "Righe.txt"

main()
{
FILE *fpSource;
char sBuffer[ROW_SIZE];

if((fpSource = fopen("righe.txt", "r")) != NULL)
{
printf("Il contenuto del file %s:\n\n", FILE_NAME);

while((fgets(sBuffer, ROW_SIZE, fpSource)) != NULL)
{
printf("%s", sBuffer);
}
}
else
{
perror("Errore in apertura del file. \n");
}

fclose(fpSource);
}

-------------------------------------------------------------------
/*
questo perche non funziona ?
*/
#include
#include

#define ROW_SIZE 200
#define FILE_NAME "Righe.txt"

main()
{
FILE *fpSource;
char sBuffer[ROW_SIZE];
char a[2];

if((fpSource = fopen("righe.txt", "r")) != NULL)
{
printf("Il contenuto del file %s: con getc \n\n", FILE_NAME);
while((getc(sBuffer, fpSource)) != NULL )
{
printf("%s", sBuffer);
}
}
else
{
perror("Errore in apertura del file. \n");
}

fclose(fpSource);
}
------------------------------------------------
datemi qualche consiglio
ciao grazie .

Risposte
apatriarca
Mi stupisce che quel programma venga compilato. Il prototipo di getc è

int getc(FILE *stream);

Richiede un solo argomento e tu ne hai passati due. Inoltre getc serve per leggere un solo carattere ma lo usi come fgets che legge un'intera riga dal file.

luca981
hai proprio ragione !!
mi sono accorto del errore .
grazzie a te.


fgetc(), getc(), getchar(), ungetc()
legge un carattere

fgets(), gets()
legge una linea

adesso vedo come posso fare !!

metto la soluzione nel forum !!

luca981
vorrei usare getc
che legge l' imput di un file testo "righe.txt"
e lo restituisce a schermo "standard output"

fgetc(), getc(), getchar(), ungetc()
legge un carattere

char nc;
nc = getc(fpSource);
printf("%s", nc);

mi sembra che non e possibile utilizzare getc.
perche non riesco ha fare il loop .
-------------------------------------
#include

#define ROW_SIZE 200
#define FILE_NAME "Righe.txt"

/*
conta i caratteri in ingresso prima versione
*/

main()
{
FILE *fpSource;
char sBuffer[ROW_SIZE];

if((fpSource = fopen("righe.txt", "r")) != NULL)
{
long nc;

nc = 0;
while (getc(fpSource) != EOF)
++nc;
printf("il numero e : %ld \n", nc);
}
else
{
perror("Errore in apertura del file. \n");
}



}

enigmagame
"luca98":

mi sembra che non e possibile utilizzare getc.
perche non riesco ha fare il loop .

Ciao, per prima cosa ti consiglio di mettere il codice tra gli appositi tag, per renderlo "leggibile", grazie!
Passando al tuo problema, la prima cosa che vuoi fare è leggere il numero di caratteri contenuti in un file con la funzione getc()? Questo potrebbe andare:
#include <stdio.h>

FILE* source = NULL;
int c = 0;
int nc = 0;

int main()
{
	if((source = fopen("source.txt", "r")) != NULL)
	{
		do
		{
			c = getc(source);
			nc++;
		} while(c != EOF);
	}

	printf("Numero di caratteri: %d\n", nc);

	fclose(source);
}

Se ci sono problemi, sono qui...
Ciao!

luca981
ciao .
sarebbe bello fare un programma che invece di
prendere le righe dal file e le spedirle allo standard autput

come questo :
#include
#include

#define ROW_SIZE 200
#define FILE_NAME "Righe.txt"

main()
{
FILE *fpSource;
char sBuffer[ROW_SIZE];

if((fpSource = fopen("righe.txt", "r")) != NULL)
{
printf("Il contenuto del file %s:\n\n", FILE_NAME);

while((fgets(sBuffer, ROW_SIZE, fpSource)) != NULL)
{
printf("%s", sBuffer);
}
}
else
{
perror("Errore in apertura del file. \n");
}

fclose(fpSource);
}
----------------------------------------
prendesse i singoli caratteri e ... fuori in standard input .

come questo che non funziona .

#include
main()
{
FILE *fpSource;
if((fpSource = fopen("righe.txt", "r")) != NULL)
{
int c, nl;
char *cn;
nl = 0;
while ((c=getc(fpSource)) != EOF)
{
cn=getc(fpSource);
printf("il t'esto e :\n");
printf("%s",cn);
if (c == '\n')
{
++nl;
}
}
printf("le righe sono : %d\n", nl);
}
else
{
perror("Errore in apertura del file. \n");
}
}

prova_lettura_file6.c: In function ‘main’:
prova_lettura_file6.c:15: warning: assignment makes pointer from integer without a cast

ciao
e grazie del aiuto .

enigmagame
Perfavore, metti il codice tra gli appositi tag "code". Grazie.
Inoltre, potresti spiegarmi a parole quello che vuoi ottenere? Non mi è ben chiaro. Tu vuoi:
1) Aprire un file.
2) Leggerne carattere per carattere e memorizzare il tutto in un buffer.
3) Alla fine della lettura scrivere il buffer sullo standart output.
E' questo ciò che vorresti ottenere?
Ciao!

PS: Mi raccomando il codice tra i tag, ci vuole un secondo.

luca981
si .
e proprio questo che vorrei ottenere !

come questo che non funziona .

#include<stdio.h>
main()
{
FILE *fpSource;
if((fpSource = fopen("righe.txt", "r")) != NULL)
{
int c, nl;
char *cn;
nl = 0;
while ((c=getc(fpSource)) != EOF)
{
cn=getc(fpSource);
printf("il t'esto e :\n");
printf("%s",cn);
if (c == '\n')
{
++nl;
}
}
printf("le righe sono : %d\n", nl);
}
else
{
perror("Errore in apertura del file. \n");
}
}

prova_lettura_file6.c: In function ‘main’:
prova_lettura_file6.c:15: warning: assignment makes pointer from integer without a cast

ciao 

luca981
oppire anche cosi , ma non capisco perche non funziona
#include<stdio.h>
/*
conta il numero di righe del testo
*/
main()
{
FILE *fpSource;
   if((fpSource = fopen("righe.txt", "r")) != NULL)
   {
      int nl;
      char cn[2];
      nl = 0;
      while ((cn=getc(fpSource)) != EOF)
           {
           
           printf("il testo e :\n");
           printf("%s",cn);     
           if (cn == '\n')
              {
              ++nl;
              }
           }
      printf("le righe sono :  %d\n", nl);
   }
   else
      {
         perror("Errore in apertura del file. \n");
      }
}

prova_lettura_file6.c: In function ‘main’:
prova_lettura_file6.c:13: error: incompatible types in assignment
prova_lettura_file6.c:18: warning: comparison between pointer and integer

Gatto891
Attento che "cn" è un array di caratteri, non una variabile di tipo carattere. Scrivendo senza l'indice si intende il puntatore al primo elemento dell'array, e quindi è incompatibile con gli assegnamenti che provi a fare.

luca981
#include<stdio.h>
/*
conta il numero di righe del testo
*/
main()
{
FILE *fpSource;
   if((fpSource = fopen("righe.txt", "r")) != NULL)
   {
      int nl;
      char cn;
      nl = 0;
      printf("il testo e :\n");
      while ((cn=getc(fpSource)) != EOF)
           {  
           printf("%c",cn);    
           putc(cn, stdout); 
           if (cn == '\n')
              {
              ++nl;
              }
           }
      printf("\n\tle righe sono :  %d\n", nl);
   }
   else
      {
         perror("Errore in apertura del file. \n");
      }
}

int fgetc(FILE *stream);                    |       int fputc(int c, FILE *stream); 
int getc(FILE *stream);                     |       int putc(int c, FILE *stream); 
int getchar(void);                          |       int putchar(int c); 
int ungetc(int c, FILE *stream);            |       
---------------------------------------------------------------------------------------------
char *fgets(char *s, int size, FILE *stream);      |       int fputs(const char *s, FILE *stream); 
char *gets(char *s);                               |       int puts(const char *s); 
------------------------------------------------------------------------------------------------------------

questa soluzione dovrebbe andare bene ma
ci sono dei caratteri ha video che non vengono fuori .
tipo la "a" acentata oppure l'apostrofo .
chissa perche ???
qualcuno lo sa
ciao grazie .[code][/code]

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.