qual o erro? #3 [RESOLVIDO]

1. qual o erro? #3 [RESOLVIDO]

felipe silva
lipman

(usa Debian)

Enviado em 23/03/2016 - 23:21h

boa noite galera, bom eu creio que estou enchendo o saco de vc com a saga qual o erro não é mesmo?
bom se estou me perdoem mas de vez em quando eu pressiso de uma ajudinha na programação...
o codigo é esse:



#include <stdio.h>

int main ()
{
char r [500];

printf ("*****************************************************************************\n");
printf ("****************************** bem vindo ao subzero *************************\n");
printf ("*****************************************************************************\n\n");
printf ("*****************************************************************************\n");
printf ("***** qual partição deseja que seja apagada e volte a ser não alocada? ******\n");
printf ("*****************************************************************************\n\n");
printf ("*****************************************************************************\n");
printf ("**************** vc deve digitar o endereço da partição escolhida! **********\n");
printf ("***************************** exemplo: /dev/sdb *****************************\n");
printf ("*****************************************************************************\n");

fgets (r, 500, stdin);

switch (dev){
case '/dev/sdb':
remove ("//dev//sdb");
printf ("aguarde 30 segundos e confira seu pen drive ainda plugado\n");
break;

case '/dev/sdc':
remove ("//dev//sdc");
printf ("aguarde 30 segundos e confira seu pen drive ainda plugado\n");
break;

case '/dev/sdd':
remove ("//dev//sdd");
printf ("aguarde 30 segundos e confira seu pen drive ainda plugado\n");
break;

case '/dev/sde':
remove ("//dev//sde");
printf ("aguarde 30 segundos e confira seu pen drive ainda plugado\n");
break;

case '/dev/sdf':
remove ("//dev//sdf");
printf ("aguarde 30 segundos e confira seu pen drive ainda plugado\n");
break;

case '/dev/sdg':
remove ("//dev//sdg");
printf ("aguarde 30 segundos e confira seu pen drive ainda plugado\n");
break;


default:{
printf ("comando invalido!\n");

}
}


return 0;
}



desculpem pelo codigo ser muito grande mas estou trabalhando nesse codigo ao maior tempão, mas agora estou com deficuldade na seguinte linha que é o case, quero programar para o usuario colocar o endereço porque não descobri como fazer o que o lcavalheiro me mensionou!
desde já agradeço pela ajuda!


  


2. Re: qual o erro? #3 [RESOLVIDO]

Paulo
Sr. F

(usa Ubuntu)

Enviado em 24/03/2016 - 12:39h

Em estrutura condicional do tipo switch case só é possível comparar dados do tipo inteiro e char, para comparar string uma boa saída nesse caso seria utilizar if else. Além disso, o parâmetro que o switch está recebendo está errado ele tem que receber 'r' e não 'dev'. Outro ponto, o tamanho da string é desnecessário para a entrada pretendida, char r[40] já é suficiente.


3. Re: qual o erro? #3 [RESOLVIDO]

Lucas Ferreira dos santos
lksmodos

(usa Ubuntu)

Enviado em 24/03/2016 - 12:47h

Sr. F escreveu:

Em estrutura condicional do tipo switch case só é possível comparar dados do tipo inteiro e char, para comparar string uma boa saída nesse caso seria utilizar if else. Além disso, o parâmetro que o switch está recebendo está errado ele tem que receber 'r' e não 'dev'. Outro ponto, o tamanho da string é desnecessário para a entrada pretendida, char r[40] já é suficiente.


Ele não declarou dev.....


4. Re: qual o erro? #3 [RESOLVIDO]

Paulo
Sr. F

(usa Ubuntu)

Enviado em 24/03/2016 - 12:52h

Exato. Não declarou e nem deveria ter usado como parâmetro do switch


5. Re: qual o erro? #3

Perfil removido
removido

(usa Nenhuma)

Enviado em 24/03/2016 - 12:56h

O comando case no C não funciona assim igual no shell script. Ele avalia caracteres. Não tenho certeza, mas deve avaliar números tambem.

Isto aqui funciona:

case 'b':
(...)
break;

case 'c':
(...)
break;

case 'd':
(...)
break;


Comparar o caractere X de sdX numa estrutura switch/case.

Senão a outra forma é uma árvore de IFs usando a função strcmp() para comparar as strings.

Não se usa switch com string em C da mesma forma que não se avalia strings da forma "abc" != "ABC". Neste último caso é strcmp().

Você pode montar um vetor com /dev/sdb, /dev/sdc ... e comparar com um IF dentro de um for.

Outra coisa, aspas simples só para caractere. Para strings aspas duplas. Ex:

'/dev/sdc' -> errado
"/dev/sdc" -> certo

----------------------------------------------------------------------------------------------------------------
http://24.media.tumblr.com/tumblr_m62bwpSi291qdlh1io1_250.gif

# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



6. Re: qual o erro? #3 [RESOLVIDO]

felipe silva
lipman

(usa Debian)

Enviado em 26/03/2016 - 20:16h

modifiquei o codigo mas passa batido os if`s e else if`s...
eis o codigo:



#include <stdio.h>

int main ()
{
char r [50];

printf ("*****************************************************************************\n");
printf ("****************************** bem vindo ao subzero *************************\n");
printf ("*****************************************************************************\n\n");
printf ("*****************************************************************************\n");
printf ("***** qual partição deseja que seja apagada e volte a ser não alocada? ******\n");
printf ("*****************************************************************************\n\n");
printf ("*****************************************************************************\n");
printf ("**************** vc deve digitar o endereço da partição escolhida! **********\n");
printf ("***************************** exemplo: /dev/sdb *****************************\n");
printf ("*****************************************************************************\n");

fgets (r, 50, stdin);

if (!strcmp(r, "/dev/sdb")){
printf ("deletando partição aguarde...\n");
remove ("//dev//sdb");
printf ("partição deletada com sucesso!\n");

}

else if (!strcmp(r, "/dev/sdc")){
printf ("deletando partição aguarde...\n");
remove ("//dev//sdc");
printf ("partição deletada com sucesso!\n");

}

else if (!strcmp(r, "/dev/sdd")){
printf ("deletando partição aguarde...\n");
remove ("//dev//sdd");
printf ("partição deletada com sucesso\n");

}

else if (!strcmp(r, "/dev/sde")){
printf ("deletando partição aguarde...\n");
remove ("//dev//sde");
printf ("partição deletada com sucesso\n");
}

else if (!strcmp(r, "/dev/sdf")){
printf ("deletando partição aguarde...\n");
remove ("//dev//sdf");
printf ("partição deletada com sucesso\n");
}

else{
printf (" partição não valida!\n");

}


return 0;
}





7. Re: qual o erro? #3 [RESOLVIDO]

felipe silva
lipman

(usa Debian)

Enviado em 26/03/2016 - 20:23h

estive pensando um pouco...
sera que eh por eu não ter declarado a biblioteca string.h?
ele vai direto para o else!
abraço a todos =D


8. Re: qual o erro? #3 [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 26/03/2016 - 22:41h

O arquivo string.h não é biblioteca. É cabeçalho ou header.
Sim, você deveria ter colocado.
Outra coisa, conferiu os possíveis retornos de strcmp()?
E se não me engano agora tem uma função chamada strncmp(), que tem um parâmetro a mais.

----------------------------------------------------------------------------------------------------------------
http://24.media.tumblr.com/tumblr_m62bwpSi291qdlh1io1_250.gif

# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



9. Re: qual o erro? #3 [RESOLVIDO]

felipe silva
lipman

(usa Debian)

Enviado em 26/03/2016 - 22:53h

faltava isso:



r[strlen(r) -1] = '\0';



um amigo me ajudou com isso!
mas obrigado a todos pela ajuda!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts