Newsgroup: it.comp.lang.c
Titolo: Aiuto programma e presentazione

Ciao ragazzi è la prima volta che posto in questo forum. Sono venuto un
paio di volte in questo forum e lo trovato molto interessanta. Ho 17
anni faccio la terza ITIS informatico e quindi è da pochi mesi che
programmo in c. Sto facendo un programma che codifica un testo txt
aperto da un file in linguaggio morse(cin la traduzione in un altro
file). Vi posto il listato
/*Scrivere un programma che possa dimostrare l'effetiva utilità del
computer in particolari momenti della vita: dimostrare in
fatti che con l'ausilio di un calcolatore il marconista del titanic
avrebbe potuto trasmettere più velocemente il messaggio
con la richiesta di aiuto espresso in codice morse.*/
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<io.h>
#include<fcntl.h>
int fd,fd1,i,j;
char  carattere,carattere2,codifica[30][30];
void main(){
fd=open("c:\\windows\\desktop\\morse.txt",O_RDONLY);
do{
read(fd,&carattere,1);
}
while(!eof(fd));
fd1=open("c:\\windows\\desktop\\morse2.txt",O_RDONLY);
j=0;
i=0;
do{
read(fd1,&carattere2,1);
if(carattere2!=45 && carattere2!=46){
carattere=carattere2;
printf("%s",carattere);
getch();
}
}
while(!eof(fd1));
getch();
}
A compilarlo non mi da nessun errore ma quando lo faccio partire mi da i
seguenti errori:
Error: morse.o:in function 'main'
morse.c(17)Error:undifened reference to 'eof'
morse.c(29)Error:undifened reference to 'eof'
There were some errors
Grazie per le risposte che mi darete(spero) e un saluto a tutti
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Vinci wrote:

Devi scrivere EOF invece di eof nel tuo codice.
Un altra cosa: ti raccomando di non usare I/O tipo UNIX (open, close, 
write, ecc). Per quanto so non é standard (ANSI) e poi stai lavorando su 
Windows, vero?. Usa invece I/O di alto livello (fopen, fclose, ecc.).
fermath

 file). Vi posto il listato
Il tuo programma e` quanto di meno standard si possa scrivere per 
risolvere un problema che, invece, ha una soluzione standard pulita, 
efficiente e, soprattutto, compilabile.
<code>
	#include<stdio.h>
	char *
	text2morse(int ch)
	{
	  switch(ch) {
	    case 'A': case 'a': return ".-.";
	    /* etc. etc. */
	  }
	}
 
	int
	main(void)
	{
	  int ch;
	  FILE *in;
	  if((in=fopen("c:\\windows\\desktop\\morse.txt",
	    "rt"))==NULL) {
	    fprintf(stderr,"Unable to open input file");
	    return 1;
	  }
	  while((ch=fgetc(in))!=EOF) fputs(text2morse(ch),stdout);
	  return 0;
	}
</code>
-- 
Baci,
Mony

 seguenti errori:
E' molto strano perche' gli errori segnalati sembrano prodotti dal
linker (pertanto prima che sia ottenuto un eseguibile).
Potresti essere piu' preciso?
... . .  -.-- --- ..-
C:\>iao Angelo


Grazie tantissimo per le risposte.Ho messo EOF e fopen ma non va lo
stesso.
In risposta ad angelo in pratico o compilo e mi dice che non ci sono
errori ma lo faccio eseguire e mi elenca gli errori.
Comunque mi sa che uso il listato di mony( a proposito me lo 
potresti spiegare un po' meglio che non ho capito molto)
Grazie ancora per le risposte ciao.


con la richiesta di aiuto espresso in codice morse.*/
#include <stdio.h>
int main()
{
    printf("Aiuto, c'e' un iceberg !\n");
    return 0;
}
-- 
Andrea Laforgia (
walkie...@libero.it
)
"Usenet is a strange place" [Dennis Ritchie]

 Grazie ancora per le risposte ciao.
Il codice e' stato leggermente modificato per renderlo un po' piu'
leggibile, ma sostanzialmente e' quello di Mony. 
<code (C) Mony Vibescu>
#include<stdio.h>
/*---------------------------------------------------------------------+
|                                                                      |
| funzione:   text2morse                                               |
|                                                                      |
| autore:     Mony Vibescu                                             |
|                                                                      |
| data:       2002/03/25                                               |
|                                                                      |
| descrizione: La funzione restituisce la codifica morse del carattere |
|              immesso in ingresso. La codifica vienene eseguita       |
|              mediante uno switch.                                    |
|              La funzione accetta in ingresso un intero e restituisce |
|              il puntatore alla stringa che rappresenta la codifica   |
|              morse.                                                  |
|                                                                      |
|              ATTENZIONE! etc. etc. significa che se non aggiungi     |
|              anche le altre codifiche, a parte il carattere 'a' o    |
|              'A', la funzione non restituira' molto. Inoltre se non  |
|              si aggiunge un'istruzione                               |
|                                                                      |
|              return NULL;                                            |
|                                                                      |
|              come "catch all instruction" il valore restituito       |
|              potrebbe essere un puntatore ad una zona di memoria     |
|              casuale con risultati non prevedibili a priori.         |
|              Infine, l'uso del commento preceduto da un doppio slash |
|              non e' standard con i compilatori attualmente in        |
|              circolazione (anche se a dire la verita' non ne ho mai  |
|              incontrato uno che non li accettasse). Se il tuo non    |
|              li digerisce, agisci di conseguenza :-)                 |
|                                                                      |
+---------------------------------------------------------------------*/
char* text2morse(int ch)
{
  switch(ch) {
    case 'A':
    case 'a': return ".-"; // Il codice per 'a' e' .-
    /* etc. etc. */ 
  }
   return NULL; // Nel caso ch non fosse uno dei
                // caratteri della codifica
}
int main(void)
{
  int ch;
  FILE *in;
// Apertura del file morse.txt contenuto nella dir
// c:\windows\desktop\ in modalita "read-only" "text"
// In caso di fallimento viene stampato sullo standard
// error la stringa "Unable to open input file".
// --------------------------------------------------
   in = fopen("c:\\windows\\desktop\\morse.txt", "rt")
   if(NULL == in)
   {
      fprintf(stderr,"Unable to open input file");
      return 1;
   }
// Fino a quando il carattere letto dal file individuato dal
// puntatore a FILE in e' diverso da EOF, viene stampata sullo
// standard out la stringa ottenuta come valore di ritorno della
// funzione text2morse.
// -------------------------------------------------------------
  while((ch = fgetc(in)) != EOF)
  {
     mCodeP = text2morse(ch);
     if(NULL != nCodeP)
     {
        fputs(mCodeP, stdout);
        fputs(" ", stdout); // altrimenti non si capisce niente.
                            // .--. e' "an", 'p' o qualche altra
                            // combinazione lecita di '.' e '-'?
     }
     else
     {
        printf("Wrong char %d\n", ch);
        return 1;
     }
  }
  return 0;
}
</code>
