Newsgroup: it.comp.lang.c
Titolo: How can I open a file, skip first 2 lines and get the 50th character?

How can I open a file, skip first 2 lines and get the 50th character?
EXP  0 R:\000\un\111\e00\e00noLog\1006\bdry_arc.e00
ARC  2
         1         1         0         0         0         0         7
i.e., I want to get the "7" in the third line, how can I do that?
thx!!

 ha scritto nel messaggio
news:bm52m9$2v8c$1...@news.hgc.com.hk...

fgets(buf,BUF_LEN,fd,);    /* ignore */
fgets(buf,BUF_LEN,fd,);    /* ignore */
fgets(buf,BUF_LEN,fd,);    /* 3rd line */
printf("%c\n",buf[50]);
I leave declarations and initializations to you.
Bye,
Ema

 How can I open a file, skip first 2 lines and get the 50th character?
Compile what follows with the name "getit" and type getit filename to
display the character you want. Developed and tested under linux.
Kind Regards
enos
***** Program starts here NOT including this line :-) *****
#include <stdio.h>
main(int npar,char *parameters[]) {
 FILE *file2open;
 char loop,examine;
 file2open=fopen(parameters[1],"r");
 while ('\n'!=getc(file2open)); /*skips line one */
 while ('\n'!=getc(file2open)); /*skips line two */
 for (loop=0;loop!=50;loop++) examine=getc(file2open);
 putchar(examine); /* now do what you want with examine */
}

> How can I open a file, skip first 2 lines and get the 50th character
[...]
Stavo cercando di insegnare al programma a spezzare le righe maggiori di 80
caratteri. Non capisco come mai, se sostituisco alle linee
 while ('\n'!=getc(file2open)); /*skips line one */
 while ('\n'!=getc(file2open)); /*skips line two */
Queste linee
 for (loop=0;loop!=80;loop++) if ('\n'!=getc(file2open)) loop=79;
 for (loop=0;loop!=80;loop++) if ('\n'!=getc(file2open)) loop=79;
Poi devo anche incrementare di uno il loop nella riga successiva, altrimenti
ottengo la 49esima lettera invece della 50esima.
Inoltre su free.it.programmazione.c, Antonio ha fatto notare come
double x = 0.5;
 while(x != 0) x = x - 0.1;
Vada in loop infinito. Come mai?
Cordiali saluti
enos

  while(x != 0) x = x - 0.1;
double in C? Mi ricordero' male...
cmq i numeri in virgola mobile non garantiscono precisione. 0.5-0.1 potrebbe
fare 0.399999999999 e così saltare lo 0. Non capisco perché queste
condizioni quando si puo' usare una piu' chiara e sicura x>=0
Ciao
Matteo
-- 
chi sono e soprattutto chi non sono:
http://web.tiscali.it/sifoneteagnalla/
un piccolo programma per studenti universitari:
http://www.ifthenelse.it/leonetti/imsv/

 
o moltiplicare il tutto per 10 o 100 alla partenza e usare gli int che non ti 
tradiscono ...
ciao

 condizioni quando si puo' usare una piu' chiara e sicura x>=0
Grazie anche per questo, lo scopo era capire perche' faceva cosi'... pero'
se con i double == non ha senso, allora x >= non ha il significato di >
credo.
Cordiali saluti
enos

 se con i double == non ha senso, allora x >= non ha il significato di >
Riformulo, chiedo scusa
" se con i double == non ha senso, allora x >=    ha    il significato di >
"
enos

 credo.
riscrivo un attimo:
while(x != 0) x = x - 0.1;
in effetti qui vuoi che esca anche se x==0 quindi è giusto > non >=. Cmq non
sono la stessa cosa perché anche se è un double potrebbe benissimo
diventare 0. Non è detto che lo salti.


 diventare 0. Non è detto che lo salti.
E' possibile che lo salti, usarlo sarebbe un rischio. Credo che convenga non
usare in alcuna occasione gli operatori >= <= e == con il tipo double.
Credo che una cosa del genere sarebbe potenziale causa di errori
x=0.5;
while(x>=0) x-=0.1;
Perche' x potrebbe assumere valore -0,234532476E-26 che sarebbe
infinitesimale ma sempre > 0 . Piuttosto
x=0.5;
while(x>(-0.01)) x-=0.1;
Per questo motivo Microsoft ha introdotto un nuovo tipo (preciso) di float:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_why_floating_point_numbers_may_lose_precision.asp
E' disponibile qualcosa del genere anche sotto linux?
Grazie molte matish, cordiali saluti al ng.
enos

 infinitesimale ma sempre > 0 [...]
Riformulo:
"Perche' x potrebbe assumere valore -0,234532476E-26 che sarebbe
infinitesimale ma sempre < 0 nonostante dovrebbe essere uguale [...]"
Dove avro' la testa... scusate... cerchero' di stare + attento.
enos