Esercizio C

di il
4 risposte

Esercizio C

Salve, sto studiando le basi di C, potreste darmi una mano ?

il seguente algo dovrebbe leggere due stringhe composte da tot caratteri, in questo caso 10, e costruirne una terza concatenandole in ordine alfabetico per poi stampare quest'ultima.
Ho copiato l'intero programma dal libro dal quale sto studiando, provando a farlo girare sul web compiler che uso per esercitarmi che ho trovato su repl.it

Il risultato però è strano: semplicemente incolla una parte della prima stringa subito dopo la seconda. Insomma, non credo faccia quello che è descritto sopra (che a dire il vero non ho capito esattamente cosa dovrebbe fare, la descrizione è un po ambigua). Non so se per un errore del libro o una diversa versione/implementazione del compilatore.

Help? thanks

#include <stdio.h>
#define LunghezzaArray 10

int main() 
{
int i,j,k;
char TempCar;
char Array1[LunghezzaArray], Array2[LunghezzaArray];
/* Nella seguente dichiarazione il valore LunghezzaArray*2 è un valore costante calcolato a tempo di compilazione*/
char ArrayConc[LunghezzaArray * 2];
/* Legge la prima stringa assicurandosi che essa non superi la dimensione dell'array, 10 caratteri*/
i=0;
while (i<LunghezzaArray)
/* Si ricordi che il valore dell'indice di un array di LunghezzaArray elementi è compreso fra 0 e LunghezzaArray-1*/
  {
       scanf("%c",&TempCar);
       Array1[i]=TempCar;
        i=i+1;}
/*Legge la seconda stringa assicurandosi che essa no nsuperi la dimensione dell'array, 10 caratteri*/
i=0;
while(i<LunghezzaArray)
      {
                scanf("%c",&TempCar);
                Array2[i]=TempCar;
                i=i+1;}
/*Confronta le due stringhe per capire quale precede l'altra in ordine alfabetico*/
i=0;
while (i<LunghezzaArray && Array1[i]==Array2[i])
i=i+1;
if (i==LunghezzaArray || Array1[i]<Array2[i])
/*Le due stringhe sono uguali o la prima precede la seconda in ordine alfabetico*/
{
        k=0; j=0;
        while (j<LunghezzaArray)
                         {
                                ArrayConc[k]=Array1[j];
                                k=k+1;
                                j=j+1;}
          j=0;
while (j<LunghezzaArray)
             {
              ArrayConc[k]=Array2[j];
              k=k+1;
              j=j+1;}
}
else
/* Se la seconda stringa precede la prima in ordine alfabetico, ossia se (Array2[i]<Array1[i])*/
     {
        k=0; j=0;
        while (j< LunghezzaArray)
                      {
                     ArrayConc[k]=Array2[j];
                     k=k+1;
                     j=j+1;}
j=0;
while (j<LunghezzaArray)
          {
              ArrayConc[k]=Array1[j];
              k=k+1;
              j=j+1;}
}
/*Stampa la stringa ottenuta dalla concatenazione*/
k=0;
while (k<(LunghezzaArray*2)){printf("%c",ArrayConc[k]); k=k+1;}
}

PS: chiedo scusa per l'indentazione assente, è un problema ?
EDIT:ok ho provato ad indentare, un po maluccio

4 Risposte

  • Re: Esercizio C

    Usa i tag code e indenta
  • Re: Esercizio C

    oregon ha scritto:


    Usa i tag code e indenta
    fatto ma il risultato non è dei migliori

    attraverso questo link riesci a vedere il codice ? così vedi pure qual'è il compilatore che utilizzo, sospetto il problema possa essere quello

    https://repl.it/repls/LongMenacingNumber
  • Re: Esercizio C

    L''identazione E' SEMPRE UN PROBLEMA: se fossi un prof, uno studente che mi presenta il codice non correttamente identato, non passerebbe l'esame.

    Consiglio: rimuovi i controlli sui 10 caratteri, e alloca spazio per 1000 caratteri, cosi' sei sicuro di avere abbastanza spazio.

    Leggiti come di passano gli argomenti da linea di comando, cosi ti togli dalle scatole la scanf
  • Re: Esercizio C

    migliorabile ha scritto:


    L''identazione E' SEMPRE UN PROBLEMA: se fossi un prof, uno studente che mi presenta il codice non correttamente identato, non passerebbe l'esame.

    Consiglio: rimuovi i controlli sui 10 caratteri, e alloca spazio per 1000 caratteri, cosi' sei sicuro di avere abbastanza spazio.

    Leggiti come di passano gli argomenti da linea di comando, cosi ti togli dalle scatole la scanf
    in questo caso in realtà la natura stessa del codice prevede che l'array abbia dimensione identica ai caratteri inseriti, non c'è rischio di overflow, se definissi inizialmente la costante a 1000 dovrei poi inserire 2 stringhe da mille caratteri ciascuna.
    Per quanto riguarda il consiglio sullo scanf, credo di non seguirti in quanto non ho ancora raggiunto quella parte di teoria ma terrò presente, grazie.
    Comunque ho risolto il problema, grazie lo stesso.

    PS: la prossima volta passo direttamente il link al codice scritto nel compiler che utilizzo, così non c'è problema di indentazione
Devi accedere o registrarti per scrivere nel forum
4 risposte