Logo Hardware.com.br
KomsumProduckt
KomsumProduc... Novo Membro Registrado
25 Mensagens 7 Curtidas

[C]Duvida sobre ler caractere no if ou switch

#1 Por KomsumProduc... 02/04/2016 - 13:56
Estou com um problema no C . Estou tentando criar um programa onde ela digita a capital de um país . É normal o objetivo , ele digita a capital , lê e o programa verifica se esta certou ou errado . Porém , mesmo com a capital correta , o resultado é sempre errado.
O código está em baixo:
[code=C]/*
#include
#include

int main (void) {

char BER;

printf("Escrava a capital da alemanha: ");
scanf("%c",&BER);
switch (BER){
case 'Berlim':
printf("You Win!");
break;
default:
printf("You Lose!");
break;
}
system("pause");
return 0;
}
*/[/code]
Se alguem poder me ajudar eu agradeço!
TmfeijoMMonroe
TmfeijoMMonr... Cyber Highlander Registrado
13.7K Mensagens 4.2K Curtidas
#2 Por TmfeijoMMonr...
02/04/2016 - 19:36
Boa noite e bem vindo !

Quanto a capital ! Quando é digitada . Em maiúsculo ? Tudo minúsculo ?
A primeira letra é em maiúscula corretamente ! Algo assim com as letras . Entendeu ?
Ao inserir ! O 1º caracteres do país tbm maiúsculo !

Abraços

KomsumProduckt disse:
Estou com um problema no C . Estou tentando criar um programa onde ela digita a capital de um país . É normal o objetivo , ele digita a capital , lê e o programa verifica se esta certou ou errado . Porém , mesmo com a capital correta , o resultado é sempre errado.
O código está em baixo:
[code=C]/*
#include
#include

int main (void) {

char BER;

printf("Escrava a capital da alemanha: ");
scanf("%c",&BER);
switch (BER){
case 'Berlim':
printf("You Win!");
break;
default:
printf("You Lose!");
break;
}
system("pause");
return 0;
}
*/[/code]
Se alguem poder me ajudar eu agradeço!
A ignorância é a pior inimiga do homem . Não tenho medo de nada; apenas da inveja . E o mundo cada vez melhor !!
Palavras sábias de um hiper profissional do judiciário; perito digital e em psicologia jurídica .
A sua inveja é a velocidade de meu sucesso .
Um coração medroso congela o trabalho . Um coração temerário incendeia qualquer serviço ; arrasando - o .
KomsumProduckt
KomsumProduc... Novo Membro Registrado
25 Mensagens 7 Curtidas
#3 Por KomsumProduc...
02/04/2016 - 21:22
TmfeijoMMonroe disse:
Boa noite e bem vindo !

Quanto a capital ! Quando é digitada . Em maiúsculo ? Tudo minúsculo ?
A primeira letra é em maiúscula corretamente ! Algo assim com as letras . Entendeu ?
Ao inserir ! O 1º caracteres do país tbm maiúsculo !

Abraços

Mais mesmo com tudo em maiúsculo ou minusculo o erro persiste . Sempre está dando "You lose" Mesmo com a primeira caractere em maiúsculo.
esquiloesperto
esquiloesper... Cyber Highlander Moderador
7.1K Mensagens 2.2K Curtidas
#4 Por esquiloesper...
02/04/2016 - 22:28
Bom, vamos lá...

O seu programa funciona, mas... você precisa estudar melhor o SWITCH-CASE, senão vai ficar dando voltas nisso daí.

Primeiro, vamos ver onde está o erro:
Anexo do post


... Mas agora, corrigindo com os "tipos certos" ele funciona:


[code=c]#include
#include

int main (void) {

char BER;

printf("Escrava a capital da alemanha: ");
scanf("%c",&BER);
switch (BER) {
case 'B':
printf("You Win!");
break;
default:
printf("You Lose!");
break;
}

system("pause"); // p/ Windows
return 0;
}
[/code]

OBSERVAÇÃO FINAL:

Em C/C++ o Switch/Case não funciona nativamente com "strings" (existem 'truques')... Mas C# sim.

...

Anexos

Só é difícil enquanto estiver oculto! cool.png
Use a pesquisa


rolleyes.png  Navegar é preciso, viver... também.  smile.png
KomsumProduckt
KomsumProduc... Novo Membro Registrado
25 Mensagens 7 Curtidas
#5 Por KomsumProduc...
03/04/2016 - 00:01
esquiloesperto disse:
Bom, vamos lá...

O seu programa funciona, mas... você precisa estudar melhor o SWITCH-CASE, senão vai ficar dando voltas nisso daí.

Primeiro, vamos ver onde está o erro:
Anexo do post


... Mas agora, corrigindo com os "tipos certos" ele funciona:


[code=c]#include
#include

int main (void) {

char BER;

printf("Escrava a capital da alemanha: ");
scanf("%c",&BER);
switch (BER) {
case 'B':
printf("You Win!");
break;
default:
printf("You Lose!");
break;
}

system("pause"); // p/ Windows
return 0;
}
[/code]

OBSERVAÇÃO FINAL:

Em C/C++ o Switch/Case não funciona nativamente com "strings" (existem 'truques')... Mas C# sim.

...

Obrigado , isso foi útil . Más só tem desse jeito ? Porque se a pessoa digitar qualquer coisa com B no início ela consegue o "you win" .
esquiloesperto
esquiloesper... Cyber Highlander Moderador
7.1K Mensagens 2.2K Curtidas
#6 Por esquiloesper...
03/04/2016 - 00:17
- Tem diversos "jeitos":

Use " if / else "
" compare "
" strcmp "
"
regex "
" find "
...


Em C/C++ o "Switch" usa tipos bem básicos, permitindo apenas constantes INT ou CHAR.
Conforme já dito: Estude o SWITCH/CASE em C/C++ para aprender como utilizá-lo corretamente.

...
Só é difícil enquanto estiver oculto! cool.png
Use a pesquisa


rolleyes.png  Navegar é preciso, viver... também.  smile.png
KomsumProduckt
KomsumProduc... Novo Membro Registrado
25 Mensagens 7 Curtidas
#7 Por KomsumProduc...
03/04/2016 - 10:57
esquiloesperto disse:
- Tem diversos "jeitos":

Use " if / else "
" compare "
" strcmp "
"
regex "
" find "
...


Em C/C++ o "Switch" usa tipos bem básicos, permitindo apenas constantes INT ou CHAR.
Conforme já dito: Estude o SWITCH/CASE em C/C++ para aprender como utilizá-lo corretamente.

...

Obrigado , Vou estudar mais sobre o switch . Mas você recomenda que eu utilize qual para esse situação?
lipman
lipman Tô em todas Registrado
567 Mensagens 216 Curtidas
#8 Por lipman
03/04/2016 - 16:35
Consertei seu código... Aprenda agora sobre cada função usada aqui OK?
[code=C]/*
#include
#include
#include
int main ()
{

char BER [500];

printf("Escrava a capital da alemanha: ");
fgets (BER, 500, stdin);
BER[strlen(BER)-1]='\0';
if (!strcmp(BER, "Berlim"){
printf (" you Win");
}
else {
printf (" you lose");
}
system("pause");
return 0;
}
*/[/code]


Só deve usar system ("pause");
Se seu sistema for Windows...
Caso alcontrario, essa opção é descartável!
Porque não irá funcionar OK?
T+
KomsumProduckt
KomsumProduc... Novo Membro Registrado
25 Mensagens 7 Curtidas
#9 Por KomsumProduc...
03/04/2016 - 19:12
lipman disse:
Consertei seu código... Aprenda agora sobre cada função usada aqui OK?
[code=C]/*
#include
#include
#include
int main ()
{

char BER [500];

printf("Escrava a capital da alemanha: ");
fgets (BER, 500, stdin);
BER[strlen(BER)-1]='\0';
if (!strcmp(BER, "Berlim"){
printf (" you Win");
}
else {
printf (" you lose");
}
system("pause");
return 0;
}
*/[/code]


Valeu , só preciso mesmo estudar um pouco mais sobre strings . Mas o código que você passou está tendo 3 error para mim . Os erros são:
error: too few arguments to function 'strcmp'
error: expected statement before ')' token
error: expected ';' before ')' toke
Tentei arrumar so que não consegui.
lipman
lipman Tô em todas Registrado
567 Mensagens 216 Curtidas
#10 Por lipman
03/04/2016 - 19:26
Desculpe, estou digitando pelo celular, faltou um ) no código, veja se funciona agora.
[code=C]/*
#include
#include
#include
int main ()
{

char BER [500];

printf("Escrava a capital da alemanha: ");
fgets (BER, 500, stdin);
BER[strlen(BER)-1]='\0';
if (!strcmp(BER, "Berlim")){
printf (" you Win");
}
else {
printf (" you lose");
}
system("pause");
return 0;
}
*/[/code]
KomsumProduckt
KomsumProduc... Novo Membro Registrado
25 Mensagens 7 Curtidas
#11 Por KomsumProduc...
03/04/2016 - 19:33
lipman disse:
Desculpe, estou digitando pelo celular, faltou um ) no código, veja se funciona agora.
[code=C]/*
#include
#include
#include
int main ()
{

char BER [500];

printf("Escrava a capital da alemanha: ");
fgets (BER, 500, stdin);
BER[strlen(BER)-1]='\0';
if (!strcmp(BER, "Berlim")){
printf (" you Win");
}
else {
printf (" you lose");
}
system("pause");
return 0;
}
*/[/code]

Muito obrigado! Isso mesmo que eu queria . Vou estudar sobre esse código , saber mais sobre ele e como funciona . Muito obrigado :3
Até mais.
KomsumProduckt
KomsumProduc... Novo Membro Registrado
25 Mensagens 7 Curtidas
#12 Por KomsumProduc...
04/04/2016 - 20:05
lipman disse:
Desculpe, estou digitando pelo celular, faltou um ) no código, veja se funciona agora.
[code=C]/*
#include
#include
#include
int main ()
{

char BER [500];

printf("Escrava a capital da alemanha: ");
fgets (BER, 500, stdin);
BER[strlen(BER)-1]='\0';
if (!strcmp(BER, "Berlim")){
printf (" you Win");
}
else {
printf (" you lose");
}
system("pause");
return 0;
}
*/[/code]

Mais uma coisa . Tipo char BER[500] Você pode fazer BER[0] , BER[1]em diante . Mas como fazer nessa situação? utilizando matrizes?e como fica ? BER[500][10]
Pirituba
Pirituba Super Participante Registrado
355 Mensagens 91 Curtidas
#14 Por Pirituba
04/04/2016 - 20:21
Blz
#include<stdio.h>

int main(void) {

char paises[20][15]; /*Vc possuira espaço para vinte países com no maximo 14 caracteres. Pq 14?*/

scanf("%s", paises[1]);
scanf("%s", paises[2]);

printf("%s\n", paises[1]);
printf("%s\n", paises[2]);
printf("%c\n", paises[1][2]); /*notou a diferença entre string e char, tenta colocar s pra ver*/
return 0;
}


Abraços
"O mundo é um moinho."
– Cartola

“A primeira coisa a entender é que você não entende."
– Soren Aabye Kierkegaard
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal