Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicitÓ e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Stinghe in C
Forum - C/C++ - Stinghe in C

Avatar
bomber (Normal User)
Newbie


Messaggi: 3
Iscritto: 26/10/2011

Segnala al moderatore
Postato alle 15:17
Mercoledý, 26/10/2011
Salve a tutti sono alle prime armi con il C. stavo provando a fare un semplice programmino che data una stringa ne inverte le cifre.
Ho scritto il seguente codice, che compila senza errori ma poi si blocca subito. Dove ho sbagliato? Grazie a tutti per l'aiuto  

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. //prototipi delle funzioni
  6. void inverti(char*s);
  7. void swap(char *pa, char *pb);
  8. int main()
  9. {
  10.     printf("Programma in c che inverte le cifre di un numero......!\n");
  11.     printf("\n");
  12.     char x[5];
  13.     int i;
  14.     printf("inserisci numero da invertire...\n");
  15.     for(i=0;i<=4;++i)
  16.     {
  17.         scanf("%c",x[i]);
  18.     }
  19.     printf("\n");
  20.     inverti(x);
  21.     printf("numero invertito:\n \n");
  22.     for(i=0;i<=4;++i)
  23.     {
  24.         printf("%c",x[i]);
  25.     }
  26.  
  27.     return 0;
  28. }
  29.  
  30. //implementazione delle funzioni
  31. void swap(char *pa, char *pb) {
  32.    int temp;
  33.  
  34.    temp = *pa;
  35.    *pa = *pb;
  36.    *pb = temp;
  37. }
  38.  
  39.  
  40. void inverti(char*s)
  41. {
  42.     int i=0;
  43.     int j;
  44.     j=strlen(s)-1;
  45.     while(i<j)
  46.     {
  47.         swap(s[i],s[j]);
  48.         i++;
  49.         j--;
  50.     }
  51. }


PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6075
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 15:41
Mercoledý, 26/10/2011
Nell'input devi solamente scrivere

    printf("inserisci numero da invertire...\n");
    scanf("%s", x);

ed elimina quel ciclo for ...

Inoltre deve essere

swap(&s[ i ], &s[j]);

Ultima modifica effettuata da nessuno il 26/10/2011 alle 15:43


Ricorda che nessuno Ŕ obbligato a risponderti e che nessuno Ŕ perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilitÓ) chiamava il gioco del Lotto Tassa sulla stupiditÓ.
PM Quote
Avatar
bomber (Normal User)
Newbie


Messaggi: 3
Iscritto: 26/10/2011

Segnala al moderatore
Postato alle 17:16
Mercoledý, 26/10/2011
Ti ringrazio molto. Ora funziona ma ho un dubbio. Ho eliminato il ciclo for solo in fase di input, senza eliminarlo per stampare la stringa e funziona. Come mai per la stampa va fatto il ciclo mentre per l'immissione no?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6075
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:30
Mercoledý, 26/10/2011
Anche per la visualizzazione puoi eliminare il ciclo e sostituirlo con una

printf("%s\n", x);


Ricorda che nessuno Ŕ obbligato a risponderti e che nessuno Ŕ perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilitÓ) chiamava il gioco del Lotto Tassa sulla stupiditÓ.
PM Quote