Sto cercando di far sì che un programma permetta all'utente di inserire una parola o un carattere, memorizzarlo e poi stamparlo finché l'utente non lo digita di nuovo, uscendo dal programma. Il mio codice assomiglia a questo:
#include <stdio.h>
int main()
{
char input[40];
char check[40];
int i=0;
printf("Hello!\nPlease enter a word or character:\n");
gets(input);
printf("I will now repeat this until you type it back to me.\n");
while (check != input)
{
printf("%s\n", input);
gets(check);
}
printf("Good bye!");
return 0;
}
Il problema è che continuo ad ottenere la stampa della stringa di input, anche quando l'input dell'utente (check) corrisponde all'originale (input). Sto confrontando i due in modo errato?
Non puoi (utilmente) confrontare le stringhe usando !=
o ==
, devi usare strcmp
:
while (strcmp(check,input) != 0)
La ragione di questo è che !=
e ==
confronteranno solo gli indirizzi base di quelle stringhe. Non il contenuto delle stringhe stesse.
Ok alcune cose: gets
non è sicuro e dovrebbe essere sostituito con fgets(input, sizeof(input), stdin)
in modo da non ottenere un buffer overflow.
Poi, per confrontare le stringhe, dovete usare strcmp
, dove un valore di ritorno di 0 indica che le due stringhe corrispondono. Usando gli operatori di uguaglianza (es. !=
) si confronta l'indirizzo delle due stringhe, al contrario dei singoli caratteri
s al loro interno.
Si noti inoltre che, anche se in questo esempio non causerà problemi, fgets
memorizza anche il carattere newline, '\n'
nei buffer; gets()
non lo fa. Se si confronta l'input dell'utente da fgets()
con un letterale di stringa come "abc"
non corrisponderebbe mai (a meno che il buffer sia troppo piccolo in modo che l' '\n'
non possa entrarci).
EDIT: e battuto dal super veloce Mysticial ancora una volta.
Non potete confrontare direttamente gli array in questo modo
array1==array2
Dovreste confrontarli char-by-char; per questo potete usare una funzione e restituire un valore booleano (True:1, False:0). Poi potete usarlo nella condizione di test del ciclo while.
Provate questo:
#include <stdio.h>
int checker(char input[],char check[]);
int main()
{
char input[40];
char check[40];
int i=0;
printf("Hello!\nPlease enter a word or character:\n");
scanf("%s",input);
printf("I will now repeat this until you type it back to me.\n");
scanf("%s",check);
while (!checker(input,check))
{
printf("%s\n", input);
scanf("%s",check);
}
printf("Good bye!");
return 0;
}
int checker(char input[],char check[])
{
int i,result=1;
for(i=0; input[i]!='\0' || check[i]!='\0'; i++) {
if(input[i] != check[i]) {
result=0;
break;
}
}
return result;
}