Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Forum - C/C++
- mi potreste dare una mano??(vettore con stringhe)
()
Newbie
Messaggi: Iscritto:
Postato alle 1:00
Giovedì, 01/01/1970
sono alle prime armi (ho 11 anni e sto studiando il mio primo libro di C, siate clementi per i mille errori che ci saranno:rotfl e ho provato a scrivere questo programma ma non funziona
Codice sorgente - presumibilmente C++
/*programma per il calcolo di un termine incognito di una proporzione*/
#include<stdio.h>
int calcX(int y,int z,int t);/*calcola primo termine*/
int calcY(int x,int z,int t);/*calcola secondo termine*/
int calcZ(int x,int y,int t);/*calcola terzo termine*/
int calcT(int x,int y,int z);/*calcola quarto termine*/
Ci siamo passati tutti quindi tranquillo che non ti mangia nessuno
Passiamo ora al tuo programma.
L'errore che ti viene segnalato, come probabilmente già saprai, è dovuto alla seguente riga
il problema è che una stringa è una vettore di caratteri, ma nel tuo caso tu dovresti scrivere un vettore di vettori, ossia una matrice.
Esempio :
Codice sorgente - presumibilmente C/C++
char s[3][3] = {"A","ABC","CD"};
il risultato sarebbe
Matrice 3x3
|0|1|2|
|0| A
|1| A B C
|2| C D
Come puoi vedere il risultato prodotto è quello che serve a te ossia leggendo solo le righe ottieni un vettore di stringhe. Tuttavia, dato che in C non vi è il tipo stringa ma deve essere definito, e di conseguenza trattato, come vettore di caratteri hai bisogno di creare un vettore di vettori di caratteri, altrimenti detto matrice.
Dato che i vettori sono entità non dinamiche, ossia una volta creato un vettore di 10 elementi quello rimane composto di 10 elementi, non può essere ampliato o ristretto.
Per questo motivo devi definire un numero sufficiente di caratteri tali da contenere tutte le parole previste.
Nell'esempio fatto gli indici posti tra parentesi quadre equivalgono a
corretto questo problema te ne si presente un altro alla seguente riga :
Codice sorgente - presumibilmente C/C++
} while (vf != string)/*fine del comando do...while*/
è un warning con il seguente testo :
[Warning] comparison between pointer and integer
ossia tenti di confrontare un carattere con l'indirizzo in memoria dove è salvata la matrice e quindi genera un warning. Dovresti confrontare ogni singolo elemento della matrice con il tuo carattere.
Infine vi è un ultimo errore
syntax error before "if"
alla riga
Codice sorgente - presumibilmente Plain Text
if( x = 0 ) {
in quanto dopo la fine del do..while va posto il ;
Inoltre l'operatore di confronto è '==' e non '='
dovresti riscrivere
Codice sorgente - presumibilmente Plain Text
if( x == 0 ) {
spero di esserti stato di aiuto
Ultima modifica effettuata da andrea.b89 il 11/03/2009 alle 21:49
()
Newbie
Messaggi: Iscritto:
Postato alle 20:35
Mercoledì, 11/03/2009
Grazie mille, ma non ho capito bene cosa devo fare in questa parte
Testo quotato
Postato originariamente da andrea.b89:
Codice sorgente - presumibilmente C/C++
} while (vf != string)/*fine del comando do...while*/
è un warning con il seguente testo :
[Warning] comparison between pointer and integer
ossia tenti di confrontare un carattere con l'indirizzo in memoria dove è salvata la matrice e quindi genera un warning. Dovresti confrontare ogni singolo elemento della matrice con il tuo carattere.
Prima cosa, se devi verificare una stringa, ciò che devi fare è leggere una stringa.
Quindi la scanf deve essere scritta con argomento diverso.
Per il controllo ecco come devi fare :
Codice sorgente - presumibilmente C/C++
while(trovato == 0 && i < 11)
if (strcmp(vf, string[i]) == 0)
trovato = 1;
else
i++;
quanto scritto rappresenta il controllo per verificare se la risposta data è contenuta nel tuo vettore string.
Ora ti posto il codice del programma corretto, perchè gli errori sono diversi. Ad esempio quando chiami una funzione devi darle lo stesso nome del prototipo (ossia il nome di quando viene definita, ad esempio per la funzione sulla X devi scrivere calcX e non calcolaX).
Codice sorgente - presumibilmente C++
/*programma per il calcolo di un termine incognito di una proporzione*/
#include<stdio.h>
#include<string.h>
int calcX(int y,int z,int t);/*calcola primo termine*/
int calcY(int x,int z,int t);/*calcola secondo termine*/
int calcZ(int x,int y,int t);/*calcola terzo termine*/
int calcT(int x,int y,int z);/*calcola quarto termine*/
printf("Inserisci i termini(0 come termine incognito):\n");
scanf("%d %d %d %d", &x, &y, &z, &t);
printf("%d:%d=%d:%d\tGiusto?", x, y, z, t);
//lettura di una stringa
//la sequenza di caratteri letti viene memorizzata a
//partire dalla prima posizione del vettore vf
scanf("%s", &vf[0]);
trovato =0;
i =0;
//controllo stringa inserita
while(trovato == 0 && i < 11)
if(strcmp(vf, string[i])== 0)
trovato =1;
else
i++;
}while(trovato == 0);/*fine del comando do...while*/
if( x == 0 ){
calcX(y,z,t);}/*fine del ramo if*/
else
if( y == 0 ){
calcY(x,z,t);}/*fine del ramo if*/
else
if( z == 0 ){
calcZ(x,y,t);}/*fine del ramo if*/
else
if( t == 0 ){
calcT(x,y,z);}/*fine del ramo if*/
printf("%d:%d=%d:%d", x, y, z, t);
}/*fine della funzione main*/
int calcX(int y,int z,int t){
int x;
x = y * z / t;
return x;
}/*fine della funzione calcX*/
int calcY(int x,int z,int t){
int y;
y = x * t / z;
return y;
}/*fine della funzione calcY*/
int calcZ(int x,int y,int t){
int z;
z = x * t / y;
return z;
}/*fine della funzione calcZ*/
int calcT(int x,int y,int z){
int t;
t = y * z / x;
return t;
}/*fine della funzione calcT*/
prova a confrontare il codice che ti ho corretto con il tuo originale e se avrai domande sarò felice di risponderti comunque tranquillo che non ti ho toccato il resto del programma, ho solo corretto gli errori comunque per avere 11 anni sei sulla buona strada