Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 23-02-2005, 18:51   #1
-Yara-
Senior Member
 
L'Avatar di -Yara-
 
Iscritto dal: Nov 2003
Città: Pordenone - Tarvisio
Messaggi: 2451
[C]Files

Salve a tutti ho un problema che non riesco a risolvere:
io devo, da un programma c, aprire un file e leggere il contenuto e metterlo in una stringa:
Codice:
#include<stdio.h>
#include<stdlib.h>

int main()
{
FILE *file;
char stringa[30];
file=fopen("file.txt","r");
while(!feof(file))
{
stringa=fgets(stringa,30,file);
}
printf("%s",stringa);
getchar();
}
Solo che non funziona...non riesco a capire bene come funziona fgets, ma mi pare di aver capito che ritorna una stringa.
Qualcuno mi aiuta?
__________________
Me? The Chosen One? They chose me, and i didn't even graduate from fuckin' high school
Wind FTTE Vula 100/20 - Stats
Retelit / Valcanale 20Mbit/2Mbit // Wind 100/20+Wind4G con EdgerouterX
-Yara- è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2005, 19:51   #2
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Credo che bisogni prima dichiarare stringa come char * e fare un bel stringa = (char *) malloc(30), poi usare fgets e infine usare free(stringa)

ciao
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2005, 20:01   #3
anx721
Senior Member
 
L'Avatar di anx721
 
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
#include<stdio.h>
#include<stdlib.h>

int main()
{
FILE *file;
char stringa[30];
file=fopen("file.txt","r");
while(!feof(file))
{
fgets(stringa,30,file);
printf("%s",stringa);
}
getchar();
}
__________________
Sun Certified Java Programmer
EUCIP Core Level Certified

European Certification of Informatics Professionals
anx721 è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2005, 20:02   #4
anx721
Senior Member
 
L'Avatar di anx721
 
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
programma per leggere un intero file di testo in una stinga:

Codice PHP:
/* fread example: read a complete file */
#include <stdio.h>
#include <stdlib.h>

int main () {
  
FILE pFile;
  
long lSize;
  
char buffer;

  
pFile fopen "myfile.txt" "rb" );
  if (
pFile==NULL) exit (1);

  
// obtain file size.
  
fseek (pFile SEEK_END);
  
lSize ftell (pFile);
  
rewind (pFile);

  
// allocate memory to contain the whole file.
  
buffer = (char*) malloc (lSize);
  if (
buffer == NULL) exit (2);

  
// copy the file into the buffer.
  
fread (buffer,1,lSize,pFile);


  
// terminate
  
fclose (pFile);
  
free (buffer);
  return 
0;

http://www.cplusplus.com/ref/

per documentarti sulla libreria del c
__________________
Sun Certified Java Programmer
EUCIP Core Level Certified

European Certification of Informatics Professionals
anx721 è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2005, 20:11   #5
-Yara-
Senior Member
 
L'Avatar di -Yara-
 
Iscritto dal: Nov 2003
Città: Pordenone - Tarvisio
Messaggi: 2451
Ringrazio entrambi, comunque mi serviva per fare un programma che, dato appunto un testo in input controllasse quante volta una certa lettera compariva.
Io ho provato a fare cosi ma non funziona
Codice:
#include<stdio.h>
#include<stdlib.h>
#define dim 30

int main(char argc)
{
FILE *fl;
int a,b,c,d,e,f,g,h,i,l,m,n,o,p,q,r,s,t,u,v,z,k;
char string[dim];
if(argc==2)
{
printf("\nQuesto programma riceve come input un file e controllo quante volte compare in tale file una certa lettera\n"); 
exit(0);
}
fl=fopen("file.txt","r");
while(!feof(fl))
{
fgets(string,dim,fl);
printf("%s",string);
}
k=0;
while(k<dim-1){
if(string[k]=='a') a++;
if(string[k]=='b') b++;
if(string[k]=='c') c++;
if(string[k]=='d') d++;
if(string[k]=='e') e++;
if(string[k]=='f') f++;
if(string[k]=='g') g++;
if(string[k]=='h') h++;
if(string[k]=='i') i++;
if(string[k]=='l') l++;
if(string[k]=='m') m++;
if(string[k]=='n') n++;
if(string[k]=='o') o++;
if(string[k]=='p') p++;
if(string[k]=='q') q++;
if(string[k]=='r') r++;
if(string[k]=='s') s++;
if(string[k]=='t') t++;
if(string[k]=='u') u++;
if(string[k]=='v') v++;
if(string[k]=='z') z++;
k++;
}
printf("%c",a);
getchar();
}
__________________
Me? The Chosen One? They chose me, and i didn't even graduate from fuckin' high school
Wind FTTE Vula 100/20 - Stats
Retelit / Valcanale 20Mbit/2Mbit // Wind 100/20+Wind4G con EdgerouterX
-Yara- è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2005, 20:22   #6
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Hai confuso leggermente il funzionamento di FGETS.

fgets() come valore di ritorno non emette una stringa di caratteri ma un "puntatore" a una stringa , che è la stringa dove sono stati memorizzati i caratteri letti.

I caratteri letti vengono memorizzati nell'array specificato nel primo argomento che nel tuo caso (fgets(stringa,30,file) ) è proprio stringa .

A questo punto con la locuzione "stringa=fgets(stringa,30,file)" cerchi di attribuire all' identificatore dell' array stringa[] un indirizzo (che poi è ancora il suo stesso indirizzo) , ma dato che stringa[] non è stato dichiarato come puntatore , ma come array il compilatore impedisce l'assegnamento dell' indirizzo bloccando la compilazione.

Inoltre il tuo programma è sbagliato .

Quello che tu vuoi fare credo sia visualizzare l'intero contenuto del file 30 caratteri per volta, solo che hai lasciato fuori la printf() dal ciclo while , perciò quello che visualizzerai saranno solo gli ultimi 30 caratteri del file (a meno che questo non sia proprio quello che vuoi fare )

A sto punto ci sono 2 soluzioni che puoi usare , una coi puntatori e l'altra con gli array te le posto tutte e due :
PUNTATORI
Codice:
#include<stdio.h>
#include<stdlib.h>

int main()
{
  FILE *file;
  char *stringa = NULL;
  stringa = malloc(30*sizeof(char));
  file=fopen("file.txt","r");
  while(!feof(file)) {
    stringa=fgets(stringa,30,file);
    if(stringa != NULL) 
      printf("%s",stringa);
  }  
  getchar();
}
ARRAY
Codice:
#include<stdio.h>
#include<stdlib.h>

int main()
{
  FILE *file;
  char stringa[30];
  file=fopen("file.txt","r");
  while(!feof(file)) {
    fgets(stringa,30,file);
    if(!feof(file))
      printf("%s",stringa);
  }  
  getchar();
}
Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2005, 20:28   #7
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Bentornato, Anonimo! È un bel po' che non ti trovo qui sul forum.

Insomma, avevo parzialmente ragione io, eh?
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2005, 20:33   #8
-Yara-
Senior Member
 
L'Avatar di -Yara-
 
Iscritto dal: Nov 2003
Città: Pordenone - Tarvisio
Messaggi: 2451
Non so come ringraziarti...mi hai chiarito un po di dubbi
Sai per caso dirmi qualcosa per il programma che ho postato "2 posts fa"?

Grazie
__________________
Me? The Chosen One? They chose me, and i didn't even graduate from fuckin' high school
Wind FTTE Vula 100/20 - Stats
Retelit / Valcanale 20Mbit/2Mbit // Wind 100/20+Wind4G con EdgerouterX
-Yara- è offline   Rispondi citando il messaggio o parte di esso
Old 24-02-2005, 15:01   #9
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Ciao

Beh , diciamo che più che altro l'errore non stava nell' utilizzo dell' array , ma proprio nell' utilizzo di FGETS .

Il tuo programma non funziona per alcuni dei problemi che ti ho elencato sopra ed inoltre è un po' dispersivo, tutti quegli IF sono inutili .

Ho fatto un programmino che controlla tutte le lettere quante volte sono state scritte in una stringa , spero possa esserti utile capire come funziona .

Non l'ho controllato in maniera particolare , quindi non saprei dirti se ci sono bug mostruosi oppure no

Ciao

Codice:
#include <stdio.h>
#include <stdlib.h>

int main(void) {

  int array[58] = {0}, howmany, count;
  char stringa[30] = {'\0'};
  FILE *fp;

  if ((fp = fopen("file.txt", "rb")) != NULL) {

    while(!feof(fp)) {
      howmany = fread(stringa, sizeof(char), 30, fp);

      for(count=0; count<howmany;count++)

	if (stringa[count] >= 65 && stringa[count]<= 122)
	  array[stringa[count]-65]++;

    }
    fclose(fp);
    for(count=0; count<26; count++)
      array[count] += array[count+32];

    for(count=0; count<26; count++)

      printf("La lettera %c è stata trovata %d volte\n", count+65, array[count]);

    return 0;

  }
  else {
    printf("Errore nell'apertura del file file.txt\n");
    return 1;
  }
}
PS= Se non capisci qualche passaggio ovviamente chiedi pure
__________________
GPU Compiler Engineer

Ultima modifica di AnonimoVeneziano : 24-02-2005 alle 15:43.
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2005, 15:39   #10
Cecco BS
Senior Member
 
L'Avatar di Cecco BS
 
Iscritto dal: Mar 2003
Messaggi: 2155
salve a tutti... ultimamente sto provando a smanettare col C, senza una conoscenza specifica, così per imparare qualcosa... oggi ho provato a scrivere qualche programma che operi su files... adesso sto provando da un po' a scrivere un programma che mi prenda una stringa da un file esterno, ma ho incontrato qualche problema.... facendo una ricerca mi sono imbattuto in questa discussione.... ho provato a guardare i codici postati ma ho qualche problemuccio a comprenderli a fondo...
...
...vi posto dunque il codice (come ho già detto sono un wannabe, quindi sarà sicuramente pieno di imperfezioni):

Codice:
#include <stdio.h>
#include <stdlib.h>

int main()
{
  FILE *file;
  char s[5];
  file=fopen("file_scan.txt","r");
  fgets(s,5,file);
  printf("Nel file c'è scritto: %s",s);
  return 0;
}

Innanzi tutto chiedo correzioni sul mio codice... poi ho qualche questione relativamente ai programmi postati:

1 - il ciclo while dei vostri programmi è indispensabile? Controlla che file sia diverso da eon of file, giusto?
2 - a cosa serve il getchar() alla fine del programma?
__________________
Asus P4C800 ► Northwood-C 2,8 GHz @ 3,4 GHz ► Thermalright SP94

Ultima modifica di Cecco BS : 31-03-2005 alle 15:41.
Cecco BS è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2005, 15:40   #11
Cecco BS
Senior Member
 
L'Avatar di Cecco BS
 
Iscritto dal: Mar 2003
Messaggi: 2155
scusate... doppio post...
__________________
Asus P4C800 ► Northwood-C 2,8 GHz @ 3,4 GHz ► Thermalright SP94
Cecco BS è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2005, 16:08   #12
anx721
Senior Member
 
L'Avatar di anx721
 
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
Il tuo codice è corretto, ma ti permette di leggere al più i primi 4 caratteri del file. Il ciclo while serve proprio a iterare l'operazione di lettura finchè il file non è finito; qaundo la lettura arriva alla fine del file pFile la funzione feof(pFile) restituisce 1, cosicchè puoi iterare finchè (! feof(pFile) ), cioè finchè non è raggiunta la fine del file.
__________________
Sun Certified Java Programmer
EUCIP Core Level Certified

European Certification of Informatics Professionals
anx721 è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2005, 19:40   #13
Cecco BS
Senior Member
 
L'Avatar di Cecco BS
 
Iscritto dal: Mar 2003
Messaggi: 2155
ergo se non ci fosse il ciclo while il programma non saprebbe dove finire la lettura? Cioè se il file da leggere è più corto del limite dato restituirebbe un errore? (ehm... spero di essermi spiegato!)

---

lo so che legge solo i primi quattro caratteri, era una prova solo per vedere se funziona... ma non funziona!! Il programma si termina dando un errore ma il compilatore non mi restituisce nessun errore (di solito dice "errore tal dei tale alla riga xx perchè bla bla bla")...!!
__________________
Asus P4C800 ► Northwood-C 2,8 GHz @ 3,4 GHz ► Thermalright SP94
Cecco BS è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2005, 19:45   #14
Cecco BS
Senior Member
 
L'Avatar di Cecco BS
 
Iscritto dal: Mar 2003
Messaggi: 2155
ah... penso di aver capito a cosa serve getchar();... io di solito uso:

Codice:
system(PAUSE); 
return(0);
è la stessa cosa, giusto?
__________________
Asus P4C800 ► Northwood-C 2,8 GHz @ 3,4 GHz ► Thermalright SP94
Cecco BS è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2005, 19:48   #15
Cecco BS
Senior Member
 
L'Avatar di Cecco BS
 
Iscritto dal: Mar 2003
Messaggi: 2155
aspè... che pirla!!! Avevo sbagliato nome del file!! Nel file che ho messo nella cartella del programma non c'è l'underscore, non mi ricordavo!! Pirla!! Adesso va, grazie cmq!
__________________
Asus P4C800 ► Northwood-C 2,8 GHz @ 3,4 GHz ► Thermalright SP94
Cecco BS è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2005, 21:30   #16
anx721
Senior Member
 
L'Avatar di anx721
 
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
Dunque l'errore l'hai trovato tu stesso: se il fiel non esiste il puntatore restituito da open è NULL cosicchè si genera un errore di memeria quando tenti di usarlo per leggere; è un errore che avviene a runtime, per questo il compilatore non può rilevarlo perche non è un errore di sintassi o di tipi.

Se non esegui il ciclo non sai quando devi fermarti nella lettura, in particolare non sai quanto grande è il file che stai leggendo; puoi utilizzare un array ad esempio di 100.0000 caratteri, se il file è piu corto tutto funziona e non si hanno errori, se il file è piu lungo non riuscirai a leggerlo tutto. per questo puoi seguire due strade:

1 - leggere la lunghezza del file e allocare con malloc un array grande sufficiente a contenerlo tutto;
2 - leggere un pezzo alla volta in cun ciclo fino a leggerlo tutto.
__________________
Sun Certified Java Programmer
EUCIP Core Level Certified

European Certification of Informatics Professionals
anx721 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
Il nuovo OnePlus Nord 6 è vicino al debu...
Tesla svela i risultati del Q4: conferma...
Nuova rimodulazione da Fastweb: fino a 3...
La NVIDIA RTX 5090 potrebbe presto costa...
ASUS non produrrà più smar...
CoopVoce sta per lanciare il 5G: ecco qu...
Factorial, azienda di batterie allo stat...
Le specifiche fuori di testa della Yangw...
I numeri incredibili di Xiaomi: nel 2025...
In Cina è pronto il parco fotovol...
Neuralink accelera: produzione di massa ...
Starlink abbassa l'orbita di migliaia di...
Dal MIT una nuova batteria per auto elet...
Adam Mosseri parla di IA su Instagram: l...
Suonerie personalizzate e Tone Store: il...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 18:34.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v