PDA

Visualizza la versione completa : Errori su programma in Visual C++


gege
12-11-2004, 13:20
Ciao. Ho scritto questo programmino in C++ che dovrebbe aprire un file e crearne uno uguale, ma con delle normalizzazioni.

Il codice è questo:

#include <stdio.h>
#include <string.h>
#include <math.h>

void main( void )
{
int i,j,k;
char riga[500];
FILE *sigmec10, *sigmec;

sigmec10=fopen("c:\sigmec10", "r");
if(sigmec10==NULL )
{printf("The file C:\sigmec10 was not opened\n" );
}
else
{
sigmec=fopen("c:\sigmec", "b");
if(sigmec==NULL )
{ printf("The file C:\sigmec10 was not opened\n" );
}
else
{
do
{
fscanf(sigmec10, "%s", riga);

if (riga[1]==' ')
riga[1]='#';

j=0;
for (i=1;i<=500;i++)
{
if (riga[i]==NULL)
j=j+1;
}

switch (riga[2])
{
case 'A':
if (j==9)
{
riga[j+1]=' ';
riga[j+2]=' ';
}

case 'B':
if (j==4)
{
riga[j+1]=' ';
riga[j+2]=' ';
}

case 'C':
k=j+1;
for (i = 1;i<= 345 - j;i++)
{
riga[k]=' ';
k=k+1;
}

case 'D':
if (j==8)
{
riga[j+1]=' ';
riga[j+2]=' ';
}

case 'E':
k=j+1;
for (i = 1;i<= 294 - j;i++)
{
riga[k]=' ';
k=k+1;
}

case 'F':
k=j+1;
for (i = 1;i<= 94 - j;i++)
{
riga[k]=' ';
k=k+1;
}

case 'G':
k=j+1;
for (i = 1;i<= 86 - j;i++)
{
riga[k]=' ';
k=k+1;
}

}
fprinf(sigmec,"%s",riga);
} while (feof(sigmec10));

};

};

fclose(sigmec10);
fclose(sigmec);

}

Quando lo compilo mi da questi errori:
C(11) : warning C4129: 's' : unrecognized character escape sequence
C(13) : warning C4129: 's' : unrecognized character escape sequence
C(17) : warning C4129: 's' : unrecognized character escape sequence
C(19) : warning C4129: 's' : unrecognized character escape sequence
C(33) : warning C4047: '==' : 'int ' differs in levels of indirection from 'void *'
C(93) : warning C4013: 'fprinf' undefined; assuming extern returning int
Linking...
AllineaSIGMEC10.obj : error LNK2001: unresolved external symbol _fprinf
Debug/AllineaSIGMEC10.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

AllineaSIGMEC10.exe - 2 error(s), 6 warning(s)

Cosa sono questi errori?

honneamise
12-11-2004, 14:26
Originariamente inviato da gege
Ciao. Ho scritto questo programmino in C++ che dovrebbe aprire un file e crearne uno uguale, ma con delle normalizzazioni.

Il codice è questo:

#include <stdio.h>
#include <string.h>
#include <math.h>

void main( void )
{
int i,j,k;
char riga[500];
FILE *sigmec10, *sigmec;

sigmec10=fopen("c:\sigmec10", "r");
if(sigmec10==NULL )
{printf("The file C:\sigmec10 was not opened\n" );
}
else
{
sigmec=fopen("c:\sigmec", "b");
if(sigmec==NULL )
{ printf("The file C:\sigmec10 was not opened\n" );
}
else
{
do
{
fscanf(sigmec10, "%s", riga);

if (riga[1]==' ')
riga[1]='#';

j=0;
for (i=1;i<=500;i++)
{
if (riga[i]==NULL)
j=j+1;
}

switch (riga[2])
{
case 'A':
if (j==9)
{
riga[j+1]=' ';
riga[j+2]=' ';
}

case 'B':
if (j==4)
{
riga[j+1]=' ';
riga[j+2]=' ';
}

case 'C':
k=j+1;
for (i = 1;i<= 345 - j;i++)
{
riga[k]=' ';
k=k+1;
}

case 'D':
if (j==8)
{
riga[j+1]=' ';
riga[j+2]=' ';
}

case 'E':
k=j+1;
for (i = 1;i<= 294 - j;i++)
{
riga[k]=' ';
k=k+1;
}

case 'F':
k=j+1;
for (i = 1;i<= 94 - j;i++)
{
riga[k]=' ';
k=k+1;
}

case 'G':
k=j+1;
for (i = 1;i<= 86 - j;i++)
{
riga[k]=' ';
k=k+1;
}

}
fprinf(sigmec,"%s",riga);
} while (feof(sigmec10));

};

};

fclose(sigmec10);
fclose(sigmec);

}

Quando lo compilo mi da questi errori:
C(11) : warning C4129: 's' : unrecognized character escape sequence
C(13) : warning C4129: 's' : unrecognized character escape sequence
C(17) : warning C4129: 's' : unrecognized character escape sequence
C(19) : warning C4129: 's' : unrecognized character escape sequence
C(33) : warning C4047: '==' : 'int ' differs in levels of indirection from 'void *'
C(93) : warning C4013: 'fprinf' undefined; assuming extern returning int
Linking...
AllineaSIGMEC10.obj : error LNK2001: unresolved external symbol _fprinf
Debug/AllineaSIGMEC10.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

AllineaSIGMEC10.exe - 2 error(s), 6 warning(s)

Cosa sono questi errori?

basta che leggi...

1)quando posti il codice usa il tag "code"

2)"fprinf" invece di "fprintf"

3) sigmec10=fopen("c:\sigmec10", "r");
non va bene , o usi:
"c:\\sigmec10"
oppure "c:/sigmec10"

4)ancora prima di scrivere del codice devi leggere e capire l' output del compilatore

ciao.

gege
12-11-2004, 15:03
Grazie, mi sei stato di grande aiuto.
Però non ho ancora risolto questo errore:

C(25) : warning C4047: '!=' : 'int ' differs in levels of indirection from 'void *'

e me lo da sull'istruzione

if (riga[i]!=NULL)
j=j+1;

honneamise
12-11-2004, 15:33
Originariamente inviato da gege
Grazie, mi sei stato di grande aiuto.
Però non ho ancora risolto questo errore:

C(25) : warning C4047: '!=' : 'int ' differs in levels of indirection from 'void *'

e me lo da sull'istruzione

if (riga[i]!=NULL)
j=j+1;

certo , tu hai una riga di char, non di * con cui potresti testare null.

cmq quel pezzo non lo capisco :



fscanf(sigmec10, "%s", riga);

if (riga[1]==' ')
riga[1]='#';

j=0;
for (i=1;i<=500;i++)
{
if (riga[i]==NULL)
j=j+1;
}


1) secondo me cmq e' :
fscanf(sigmec10, "%s", &riga);

2) se riga inizia con lo spazio vuoto sostituisci con '#' OK

3)non capisco COSA vuoi testare con il ciclo for...
( forse gli spazi vuoti ? )

gege
12-11-2004, 15:39
Vorrei leggere una riga per volta del file.
Su questa riga controllare che il primo carattere sia ' ' (in questo caso lo sostituisco con '#').
Poi vorrei controllare di quanti caratteri è la stringa che ho letto dal file, perchè io ho dichiarato una stringa di 500, ma non è detto che quella che ho letto sia così lunga.
Questo mi serve perchè a seconda della lunghezza effettiva devo aggiungere degli spazi al fondo.

honneamise
12-11-2004, 16:11
Originariamente inviato da gege
Vorrei leggere una riga per volta del file.
Su questa riga controllare che il primo carattere sia ' ' (in questo caso lo sostituisco con '#').
Poi vorrei controllare di quanti caratteri è la stringa che ho letto dal file, perchè io ho dichiarato una stringa di 500, ma non è detto che quella che ho letto sia così lunga.
Questo mi serve perchè a seconda della lunghezza effettiva devo aggiungere degli spazi al fondo.

c'e' la funzione strlen(...) che restituisce come int la lunghezza della stringa.

Loading