Non posso che commentare anche questo codice.
1) "stdio.h" non "studio.h"
2) "int main" non "void main" - Se dichiari void main, come puoi ritornare 0?
3) buona cosa inizializzare sempre le variabili all'atto della dichiarazione
char a[100]={0}; --> non char a[100];
int i, flag; i = flag = 0; --> non int i,flag
Infatti se vedi nel tuo codice ti sei dimenticato di inizializzare "i". Quel while non potrà mai funzionare correttamente.
3) Puoi terminare il ciclo while non appena ti accorgi che una parola non è palindroma. Questo ti permette di risparmiare inutili cicli di CPU.
Visto che devi mantenere un contatore è forse più sensato usare un for invece che un while
4) cosa è il carattere di formattazione %a ? una stringa essendo un char * si prende con %s
scanf("%s",a); --> non scanf("%a",a);
5) Per rendere il codice più carino potresti anche prendere la parola da cmqline del tipo ./mioprogramma parola-da-testare
codice corretto:
- Codice:
-
#include <stdio.h>
#include <string.h>
#define MAX_BUFFER 512
int main (int argc, char *argv[])
{
char a[MAX_BUFFER]={0};
int i, flag, len; i = flag = len = 0;
if ( argc == 2 ) {
if ( strlen(argv[1]) > MAX_BUFFER ) {
printf("Parola inserita maggiore del buffer consentito di %d caratteri\n",MAX_BUFFER);
return 1;
}
sprintf(a,"%s",argv[1]);
}
else {
printf("Inserisci parola > ");
scanf ("%s", a);
}
flag = 1;
len = strlen(a);
for ( i=0; i < len/2; i++ ){
if ( a[i] != a[len-i-1] ) {
flag = 0;
break;
}
}
if (flag == 1) {
printf ("La parola da te scelta e' PALINDROMA. \n");
} else {
printf ("La parola da te scelta NON E' PALINDROMA. \n");
return 1;
}
return 0;
}