Ragazzi vorrei proporvi un piccolo programma in C !
Il programma deve eseguire una tale operazione , ossia : data una stringa ed un determinato carattere immesso dall'utente , definisca se tale carattere sia presente nella stringa e quante volte vi compaia . Io ho optato per questa soluzione :
#include
#include
#include
int main (void){
char s[20];
int len , i , som , d ;
printf("INSERIRE STRINGA");
scanf("%s",s);
printf("INSERIRE CARATTERE");
scanf("%s",&d);
som=0;
len=strlen(s);
for(i=0;i<=len;i++){
if(s==d){
som+=1;
}
}
if(som==0){
printf("CARATTERE ASSENTE");
}else{
printf("IL CARATTERE SI PRESENTA %d VOLTE ", d);
}
system("PAUSE");
return 0;
}
.....ma con risultati poco felici . Sapreste dirmi il perché ? Per quale soluzione optereste , Voi ?
#include
#include
#include
int main (void){
char s[20];
int len , i , som , d ;
printf("INSERIRE STRINGA");
scanf("%s",s);
printf("INSERIRE CARATTERE");
scanf("%s",&d);
som=0;
len=strlen(s);
for(i=0;i<=len;i++){
if(s==d){
som+=1;
}
}
if(som==0){
printf("CARATTERE ASSENTE");
}else{
printf("IL CARATTERE SI PRESENTA %d VOLTE ", d);
}
system("PAUSE");
return 0;
}
.....ma con risultati poco felici . Sapreste dirmi il perché ? Per quale soluzione optereste , Voi ?
Risposte
&d nel secondo scanf?
Il metodo corretto per leggere un singolo carattere usando scanf è:
dove $c$ deve avere come tipo char e ho messo lo spazio per fare in modo che gli spazi venissero ignorati. Se vuoi utilizzare %s, devi per forza definire la variabile sulla quale scriverai il carattere come una stringa. Cioè:
Nota la presenza dell'1 per limitare il numero di caratteri letti a uno solo.
Ogni stringa termina poi con '\0', non è quindi necessario ricorrere a strlen e si può utilizzare:
Il resto può andare.
char c; /* ... */ scanf(" %c", &c)
dove $c$ deve avere come tipo char e ho messo lo spazio per fare in modo che gli spazi venissero ignorati. Se vuoi utilizzare %s, devi per forza definire la variabile sulla quale scriverai il carattere come una stringa. Cioè:
char c[2]; /* devi fare spazio anche per '\0' */ /* ... */ scanf("%1s", c);
Nota la presenza dell'1 per limitare il numero di caratteri letti a uno solo.
Ogni stringa termina poi con '\0', non è quindi necessario ricorrere a strlen e si può utilizzare:
for(i=0; s[i] != '\0'; ++i) { /* ... */ }
Il resto può andare.
Grazie mille !!!