Porque não posso digitar agua ou suco nesse programa?

#include <stdio.h>

int main() {
  // Declaração das variáveis
  char bebida;

  // Solicita a escolha do usuário
  printf("Deseja tomar água (a) ou suco (s)? ");
  scanf("%c", &bebida);

  // Verifica a escolha do usuário
  if (bebida == 'a') {
    // Imprime a mensagem
    printf("Você matou sua sede!");
  } else if (bebida == 's') {
    // Imprime a mensagem
    printf("Você matou sua sede com suco!");
  } else {
    // Imprime a mensagem de erro
    printf("Opção inválida!");
  }

  return 0;
}

Porque não posso digitar agua ou suco,apenas a e s nesse programa feito pelo google bard?Alguém pode corrigir para mim? a lógica está certa,mas falta algum detalhe.

Já corrigi o programa,ficou assim:

#include <stdio.h>

int main() {
  // Declaração das variáveis
  char bebida[10];

  // Solicita a escolha do usuário
  printf("Deseja tomar água ou suco? ");
  scanf("%s", &bebida);

  // Verifica a escolha do usuário
  if (strcmp(bebida, "água") == 0) {
    // Imprime a mensagem
    printf("Você matou sua sede!");
  } else if (strcmp(bebida, "suco") == 0) {
    // Imprime a mensagem
    printf("Você matou sua sede com suco!");
  } else {
    // Imprime a mensagem de erro
    printf("Opção inválida!");
  }

  return 0;
}

1 curtida

Trocou a categoria de leitura, que foi de 1 caractere (“%c”) para Mais de 1 caractere (“%s”), reservou a capacidade para 10, com isso, sendo uma comparação entre conjunto de caracteres (strings), precisou da função string compare

strcmp
Itera sobre as strings a, b até diferir ou até o fim, o que vier primeiro.
*Essa função é não binária, porque ela reposta com -1,0,1.

— Eh, isso!

Basicamente, o especificador %c indica que deve ler apenas um caractere, enquanto %s indica que deve ler vários (na verdade, uma sequência de caracteres que não sejam espaços/quebras de linha).

Para esse tipo de coisa sempre deve-se consultar a documentação :slight_smile:

Por motivos didáticos, antecipo uma expressão para a função strcmp, que quase sempre é também um exercício para iniciantes.

int stcompare(const char *s1, const char *s2) {
    // Enquanto igual E não neutra, itera a igualdade de seus elementos
    while (*s1 == *s2 && *s1)
        ++s1,
        ++s2;
    
    return (*s2-*s1);/* desreferenciar ponteiro e subtrair valores.
     Se valor no endereço de s1 > s2, retorna o valor negativo
     Se valor no endereço de s2 > s1, retorna o valor positivo
     Quando elas são iguais, retorna neutro 0
     */
}