|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2002
Città: VENICE
Messaggi: 1241
|
metallica -----> etallicama
Ringrazio anticipatamente coloro che investono il loro tempo dandomi una mano...in particolar modo cionci...
tanto per cambià ho un nuovo quesito... ho fatto un programma che memorizza una parola in un array di carateri, sposta la prima parola dietro l'ultima...eci aggiunge una 'a'...... Esempio. metallica -----> etallicama pantera -----> anterapa stratovarius ------> tratovariussa ma....qualcosanon torna...nel senso che mi vien fuori etallicam a anterap a tratovariuss a e via dicendo..... Consigli? #include <stdlib.h> #include <stdio.h> #define DIM 30 int main() {int i=0; char arr [DIM]; char *pa; printf ("Scrivi una parola in inglese: \n"); scanf ("%[^\n]",arr); pa=arr; do {printf ("%c",*(pa+1)); b++; pa++;} while (*pa!='\0'); printf ("a"); system("PAUSE"); }
__________________
...Fight with your heart, and you're Destined For Glory But fight without soul and you will loose it all... |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2002
Messaggi: 487
|
Per il semplice fatto che quando tu sei sull'ultimo carattere, gli fai stampare pa+1, cioe' il "\n".
Quindi quando esci dal ciclo hai gia' scritto il "\n" e la "a" non la scrivi di seguito alle altre lettere. Questo e' il bug, per le possibili soluzioni, beh, ce ne sono diverse, basta usare la fantasia Bye
__________________
AcM Racing :: Nulla è impossibile per chi non deve farlo |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sono d'accordissimo sui primi due gruppi...sul terzo no
Ad esempio ci può essere una soluzione molto semplice al tuo esercizio : Codice:
#include <stdio.h>
#include <stdlib.h>
#define DIM 30
int main()
{
char str[DIM];
scanf("%s", str);
printf("%s%ca\n", &str[1], str[0]);
system("PAUSE");
return 0;
}
Codice:
#include <stdio.h>
#include <stdlib.h>
#define DIM 30
int main()
{
char str[DIM];
char tmp;
int i;
scanf("%s", str);
tmp = str[0];
for(i = 0; str[i] != '\0'; ++i) /*guarda bene questo for */
str[i] = str[i+1]; /*nota il pre-incremento*/
str[i-1] = tmp;
printf("%sa\n", str);
system("PAUSE");
return 0;
}
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jan 2002
Città: VENICE
Messaggi: 1241
|
Quote:
Scusa, ma a quale \n ti riferisci? Non credo si aver capito... Azie
__________________
...Fight with your heart, and you're Destined For Glory But fight without soul and you will loose it all... |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jan 2002
Città: VENICE
Messaggi: 1241
|
Quote:
mmmCome sempre fottutamente impeccabile!! ma aspetta...ci sono cose che non mi tornano ..... nel primo metodo printf("%s%ca\n", &str[1], str[0])..... vol dire che stampi l'array str a partire dal elemento[1] ?? ahh si puo? non sapevo.... e quel %ca sta per: "che ca..o?" ciao
__________________
...Fight with your heart, and you're Destined For Glory But fight without soul and you will loose it all... |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
In pratica tu stampavi anche lo '\0'...
Per riaggiustare tutto basta una cosa del genere : Codice:
#include <stdlib.h>
#include <stdio.h>
#define DIM 30
int main()
{
int i=0;
char arr [DIM];
char *pa;
printf ("Scrivi una parola in inglese: \n");
scanf ("%[^\n]",arr);
pa=arr;
while(*(++pa)!='\0') {
printf ("%c",*pa);
}
printf ("%ca", arr[0]);
system("PAUSE");
}
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
%ca è %c che stampa un carattere (str[0] che va stampato in fondo)...mentre 'a' è la lettera che va aggiunta dopo l'ultimo carattere... |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Jan 2002
Città: VENICE
Messaggi: 1241
|
Quote:
quindi se non ho capito male... facendo %s &str[1] stampi una stringa di lettere successive a partire dal 2°elemento dell'array (dato che 'indice parte da 0)... mentre con %ca &str[0] riprendi il primo elemento dell'array e lo fai riscrivere in coda con l'aggiunta della 'a'... ma se avevo un array di numeri e volevo stampare dal secondo elem. in poi era lo stesso procedimento mettendo però %d&str[1] ? ma cosi facendo...non mi stamperebbe solo l'elemento corrispondente a quell'indirizzo di mem. dell'array?
__________________
...Fight with your heart, and you're Destined For Glory But fight without soul and you will loose it all... |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Attenzione io la & davanti a str[0] non ce l'ho messa...
Ti faccio delle equivalenze con l'aritmetica dei puntatori...almeno si capisce meglio : &str[x] equivale a str+x : è l'indirizzo dell'x-esimo elemento del vettore (una stringa per definizione è un puntatore di tipo char ad un indirizzo di memoria, la stringa termina quando viene trobvato l'elemento '\0', quindi passando &str[x] alla printf stampo dall'x-esimo carattere fino allo '\0') &str[0] equivale a str : indirizzo del primo elemento del vettore str[0] equivale a *str : contenuto del primo elemento del vettore str[x] equivale a *(str+x) : contenuto dell'x-esimo elemento del vettore Se ci metti degli interi nel vettore non li puoi stampare tutti insieme con printf... Ma li devi stampare uno alla volta con printf("%d", str[i]); |
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Oct 2002
Messaggi: 487
|
Quote:
Sorry
__________________
AcM Racing :: Nulla è impossibile per chi non deve farlo |
|
|
|
|
|
|
#11 | |||
|
Senior Member
Iscritto dal: Jan 2002
Città: VENICE
Messaggi: 1241
|
Quote:
Una cannonata! Secco fa a paja!! Inizio a fare un po di confusione..adesso che gli argomenti diventano tanti...e tosti... Grazie ancora a tutti!!
__________________
...Fight with your heart, and you're Destined For Glory But fight without soul and you will loose it all... |
|||
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:13.



















