Estou tentando conseguir que um programa deixe um usuário digitar uma palavra ou caracter, armazená-la e depois imprimi-la até que o usuário a digite novamente, saindo do programa. Meu código é parecido com este:
#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;
}
O problema é que continuo a obter a impressão da string de entrada, mesmo quando a entrada do utilizador (verificar) corresponde à original (entrada). Estou a comparar os dois de forma incorrecta?
Você pode't (utilmente) comparar cordas utilizando !=
ou ==
, você precisa utilizar strcmp
:
while (strcmp(check,input) != 0)
A razão para isto é porque !=
e ===
só irá comparar os endereços base dessas cordas. Não o conteúdo das cadeias de caracteres em si.
Ok, algumas coisas: gets
não é seguro e deve ser substituído por fgets(input, sizeof(input), stdin)
para que você não't obtenha um buffer overflow.
A seguir, para comparar as cordas, você deve utilizar strcmp
, onde um valor de retorno de 0 indica que as duas cordas combinam. Utilizando os operadores de igualdade (isto é, !=
) compara o endereço das duas cordas, ao contrário dos char
s individuais dentro delas.
E também note que, enquanto neste exemplo ele ganhou't cause um problema, 'esquece' armazena o novo caractere da linha, '\n'
nos buffers também; gets()
não. Se você comparar a entrada do usuário de fgets()
com uma string literal como "abc"
, ela nunca seria compatível (a não ser que o buffer fosse muito pequeno para que o '\n'
não coubesse nele).
e derrotado pelo super rápido Mysticial mais uma vez.
Você pode't comparar arrays diretamente como este
array1==array2
Você deve compará-los característica por característica; para isso você pode usar uma função e retornar um valor booleano (Verdadeiro:1, Falso:0). Então você pode usá-lo na condição de teste do loop while.
Experimenta isto:
#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;
}