Programma in C

di il
2 risposte

Programma in C

Salve a tutti.
Sono alle prime armi con il C, e purtroppo tra meno di un mese devo affrontare l'esame di informatica relativo proprio a questo linguaggio.
Ho provato a svolgere degli esami vecchi, e ho trovato alcune difficoltà; in particolare, questa mattina ho provato a svolgerne uno, ma provando ad eseguirlo sul compilatore mi da errore e non riesco a farlo girare.
Vi posto il testo qui sotto: ho provato più volte a trovare l'errore, ma non sono proprio riuscita a capire dove ho sbagliato. Potreste darci un'occhiata? grazie mille in anticipo.

Il testo è il seguente:
Scrivere un programma in linguaggio C che legga da standard input una stringa di caratteri Q lunga
al massimo 30 caratteri che non contiene spazi.
Dopo aver definito un array di stringhe S contenente le seguenti stringhe:
”Pippo","Pluto","Paperino","Topolino","Paperone"
il programma scriva a video tutte le stringhe dell’array S i cui caratteri iniziali coincidono esattamente
con quelli della stringa Q. Il programma dovrà inoltre scrivere a video “No match found” se
una tale stringa non esiste nell’array S.

io ho provato a risolverlo così:

#include <stdio.h>
#include <stdlib.h>
#define MAX 30
#define DIM 5

void leggi_stringa(char s[]){
printf("Inserire la nuova parola:\n");
scanf("%s",s);
}

int confronta_stringhe(char s1[],char *s2[]) {
int j=0;
int i;
for(i=0;i<DIM;i++){
while (s1[j]!='\0'){
if (s2[j]!=s1[j]) {
printf("Le due stringhe non sono uguali");
return 1;
}
else j++;
return 0;
}
}


int main() {
char q[MAX];
char* s[DIM]={"Pippo","Pluto","Paperino","Topolino","Paperone"};
int i,j;
leggi_stringa(q);
int x=confronta_stringhe(q,s);
if (x==1) {
printf ("No match found");
return 1;
}
else {
printf("%s",s};
return 0;
}
}

2 Risposte

  • Re: Programma in C

    mariol22 ha scritto:


    Salve a tutti.
    Sono alle prime armi con il C, e purtroppo tra meno di un mese devo affrontare l'esame di informatica relativo proprio a questo linguaggio.
    Ho provato a svolgere degli esami vecchi, e ho trovato alcune difficoltà; in particolare, questa mattina ho provato a svolgerne uno, ma provando ad eseguirlo sul compilatore mi da errore e non riesco a farlo girare.
    Vi posto il testo qui sotto: ho provato più volte a trovare l'errore, ma non sono proprio riuscita a capire dove ho sbagliato. Potreste darci un'occhiata? grazie mille in anticipo.

    Il testo è il seguente:
    Scrivere un programma in linguaggio C che legga da standard input una stringa di caratteri Q lunga
    al massimo 30 caratteri che non contiene spazi.
    Dopo aver definito un array di stringhe S contenente le seguenti stringhe:
    ”Pippo","Pluto","Paperino","Topolino","Paperone"
    il programma scriva a video tutte le stringhe dell’array S i cui caratteri iniziali coincidono esattamente
    con quelli della stringa Q. Il programma dovrà inoltre scrivere a video “No match found” se
    una tale stringa non esiste nell’array S.

    io ho provato a risolverlo così:

    #include <stdio.h>
    #include <stdlib.h>
    #define MAX 30
    #define DIM 5

    void leggi_stringa(char s[]){
    printf("Inserire la nuova parola:\n");
    scanf("%s",s);
    }

    int confronta_stringhe(char s1[],char *s2[]) {
    int j=0;
    int i;
    for(i=0;i<DIM;i++){
    while (s1[j]!='\0'){
    if (s2[j]!=s1[j]) {
    printf("Le due stringhe non sono uguali");
    return 1;
    }
    else j++;
    return 0;
    }
    }


    int main() {
    char q[MAX];
    char* s[DIM]={"Pippo","Pluto","Paperino","Topolino","Paperone"};
    int i,j;
    leggi_stringa(q);
    int x=confronta_stringhe(q,s);
    if (x==1) {
    printf ("No match found");
    return 1;
    }
    else {
    printf("%s",s};
    return 0;
    }
    }
  • Re: Programma in C

    Credo che il problema stia nel fatto che nel confronto delle stringhe usi come secondo indice j, e ti dà errore perché diventa maggiore della lunghezza dei nomi. Piuttosto usa sempre 0 lì dato che ti serve solo l'iniziale.

    if( s2[0] != s1[j] ){
Devi accedere o registrarti per scrivere nel forum
2 risposte