Domanda Risolto problema con le struct C89

Stato
Discussione chiusa ad ulteriori risposte.

gius1805

Utente Bronze
13 Novembre 2020
42
22
0
38
Ciao a tutti
C:
#include <stdio.h>

#define MAXC 20
#define MAXP 2

typedef struct{
    char ita[MAXC];
    char ing[MAXC];
}parola_t;

int main(){

    int i, j, max, c, indice_max;
    parola_t traduzioni[MAXP];

    for(i=0; i<MAXP; i++){
        printf("inserire parola\n");
        scanf("%s", traduzioni[i].ita);
        printf("inserire traduzione\n");
        scanf("%s", traduzioni[i].ing);
    }

    for(i=0; i<MAXP; i++){
        for(j=i+1; j<MAXP; j++){
            if(traduzioni[i].ita == traduzioni[j].ing)
                printf("%s-%s/%s-%s\n", traduzioni[i].ita, traduzioni[i].ing, traduzioni[j].ita, traduzioni[j].ing);
        }
    }

    for(i=0, max=0, c=0; i<MAXP; i++){
        for(j=i; j<MAXP;j++){
            if(traduzioni[i].ita==traduzioni[j].ita && traduzioni[j].ing != traduzioni[j].ing){
                c++;
            }
        }
        if(c>max)
            indice_max = i;
        c=0;
    }

    for(i=0; i<MAXP; i++){
        if(traduzioni[i].ita==traduzioni[indice_max].ita)
            printf("%s %s\n",traduzioni[i].ita, traduzioni[i].ing);
    }

    return 0;

}
Definire un tipo di dato parola_t che rappresenta una parola nella lingua italiana e la sua traduzione inglese (due stringhe ciascuna di al massimo 30 caratteri). Scrivere un programma che chiede all'utente 10 parole italiane e la loro traduzione in inglese. Il programma esegue le seguenti elaborazioni: * Il programma cerca quei termini italiani che sono presenti anche nella lingua inglese ma con un altro significato e li stampa a video. * Il programma cerca quei termini italiani che hanno più traduzioni in inglese Come esempio si consideri la seguente lista di parole: scope brooms
scopo scope
case houses
scatola case
goal goal
ciao hello
ciao hi
ballo ball
palla ball
ciao bye
Per il primo punto il programma stamperà a video:
scope brooms *
scopo scope
case houses *
scatola case
Per il secondo punto il programma stamperà a video:
ciao hello
ciao hi
ciao bye

Non capisco perché nel mio programma l'esecuzione non entra mai in alcuni if come per esempio:
C:
 if(traduzioni[i].ita == traduzioni[j].ing)

                printf("%s-%s/%s-%s\n", traduzioni[i].ita, traduzioni[i].ing, traduzioni[j].ita, traduzioni[j].ing);
grazie in anticipo per la risposta ;)
 
C:
#include <stdio.h>

#define MAXC 20
#define MAXP 2

typedef struct{
    char ita[MAXC];
    char ing[MAXC];
}parola_t;

int main(){

    int i, j, max, c, indice_max;
    parola_t traduzioni[MAXP];

    for(i=0; i<MAXP; i++){
        printf("inserire parola\n");
        scanf("%s", traduzioni[i].ita);
        printf("inserire traduzione\n");
        scanf("%s", traduzioni[i].ing);
    }

    for(i=0; i<MAXP; i++){
        for(j=i+1; j<MAXP; j++){
            if(traduzioni[i].ita == traduzioni[j].ing)
                printf("%s-%s/%s-%s\n", traduzioni[i].ita, traduzioni[i].ing, traduzioni[j].ita, traduzioni[j].ing);
        }
    }

    for(i=0, max=0, c=0; i<MAXP; i++){
        for(j=i; j<MAXP;j++){
            if(traduzioni[i].ita==traduzioni[j].ita && traduzioni[j].ing != traduzioni[j].ing){
                c++;
            }
        }
        if(c>max)
            indice_max = i;
        c=0;
    }

    for(i=0; i<MAXP; i++){
        if(traduzioni[i].ita==traduzioni[indice_max].ita)
            printf("%s %s\n",traduzioni[i].ita, traduzioni[i].ing);
    }

    return 0;

}
Definire un tipo di dato parola_t che rappresenta una parola nella lingua italiana e la sua traduzione inglese (due stringhe ciascuna di al massimo 30 caratteri). Scrivere un programma che chiede all'utente 10 parole italiane e la loro traduzione in inglese. Il programma esegue le seguenti elaborazioni: * Il programma cerca quei termini italiani che sono presenti anche nella lingua inglese ma con un altro significato e li stampa a video. * Il programma cerca quei termini italiani che hanno più traduzioni in inglese Come esempio si consideri la seguente lista di parole: scope brooms
scopo scope
case houses
scatola case
goal goal
ciao hello
ciao hi
ballo ball
palla ball
ciao bye
Per il primo punto il programma stamperà a video:
scope brooms *
scopo scope
case houses *
scatola case
Per il secondo punto il programma stamperà a video:
ciao hello
ciao hi
ciao bye

Non capisco perché nel mio programma l'esecuzione non entra mai in alcuni if come per esempio:
C:
 if(traduzioni[i].ita == traduzioni[j].ing)

                printf("%s-%s/%s-%s\n", traduzioni[i].ita, traduzioni[i].ing, traduzioni[j].ita, traduzioni[j].ing);
grazie in anticipo per la risposta ;)

Ti sei scontrato con il C. Non puoi usare ==. Se vuoi confrontare due stringhe devi usare strcmp (ti lascio cercare in rete come verificare l'uguaglianza).
grazie mille
 
In realtà, prima di affrontare certi esercizi, bisogna avere chiara la teoria che sta dietro le varie parti.

Se non ti è chiarissima la questione della gestione degli array di char (le stringhe del C), NON potrai affrontare gli esercizi in cui ci sono delle stringhe.

E, per la cronaca, le struct nel tuo problema non c'entrano nulla.
 
Stato
Discussione chiusa ad ulteriori risposte.