Erro no script...

1. Erro no script...

Perfil removido
removido

(usa Nenhuma)

Enviado em 19/01/2006 - 19:08h

#include<stdio.h>
#include<stdlib.h>
#define i digito
int main( int arg, char * argv[]){
int INTEIRO[50], op, digito, TAM;
char STRING[50];
printf("Que tipo de variavel vc quer converter\?\n1- INTEIRO\n2- STRING\n");
op = getchar();
if((op != 1) || (op != 2))
printf("Digite 1 para inverter Inteiros ou 2 para inverter Strings! Finalizando script!");
if (op == 1){
printf("\ndigite o valor do inteiro com menos de 51 cararcteres a ser invertido, termine o número com um ponto(.): ");
for (digito = 0; digito < 50; digito++){
scanf("%d", &INTEIRO[digito]);
if (INTEIRO[digito] == '.')
break;
}
TAM = digito;
printf("\n\n");
for ( digito = 0 ; digito <= TAM; TAM--)
printf("%d", INTEIRO[TAM]);
}
if (op == 2){
printf("\ndigite o valor da string com menos de 51 caracteres a ser invertida, termine-a com um ponto(.): ");
for (digito = 0; digito < 50; digito++){
scanf("%s", &STRING[digito]);
if (STRING[i] == '.')
break;}
TAM = digito;
printf("\n\n");
for (digito = 0; digito <= TAM; TAM-- )
printf("%c", STRING[TAM]);
}
}


Bem, eu pretendo colocar esse script aqui disponível para download no VOL, mas ainda tem alguns erros, resolvi todos, menos um. Esse script espera que você digite 1 ou 2 para executar suas funções, e eu uso a função getchar para isso. Bem, mesmo quando eu digito 1 ou 2, ele reclama o erro que dá quando o valor do op não é 1 ou 2. Não entendo isso...

Alguém pode me dar uma luz?


  


2. Re: Erro no script...

Tiago Barcellos Peczenyj
pacman

(usa Ubuntu)

Enviado em 19/01/2006 - 20:56h

oi, pra ler a opção, por que vc usa getchar ?

que tipo de variavel retorna getchar ? char ou inteiro ?

getchar retorna char, e vc quer colocar numa variavel inteira, e comparar com numeros inteiros... troca por algo como:

scanf("%d",op);

Outra coisa, vc faz um if op diferente de 1 ou 2, o que vc deveria fazer é um 'if else', dessa forma:

if (op == 1){
...
} else if (op == 2){
...
} else {
... /*aqui vc diz que o que foi digitado eh diferente de 1 e 2*/
}

Fica mais eficiente e lógico o teu código. Sugestão: não esqueça de colocar um return 0; no final do main(), pois main é uma função que retorna um valor inteiro (para o sistema operacional).


3. Re: Erro no script...

Ricardo Rodrigues Lucca
jllucca

(usa Gentoo)

Enviado em 20/01/2006 - 09:32h

Olá,

experimente colocar os numeros de comparados com op entre aspas simples. Porque isso? Getchar retorna o codigo ascii do caracter digitado, assim quando for digitado '1' teremos o inteiro 49, '2' teremos o inteiro 50 e assim sucessivamente. Uma ideia mais simples é fazer "op = getchar() - '0';", mas se não for numeros pode acarretar bug. Por exemplo o caracter 'A' seria o numero 17(ahn??).

[]'s


4. ...

Perfil removido
removido

(usa Nenhuma)

Enviado em 20/01/2006 - 21:46h

Nossa, eu não acredito que pude ser tão distraído... bom, eu fiz o que o Jiluca falou, e o erro foi-se embora. Mas agora o programa está fazendo algo bem maluco!

Esse programa espera que você digite 1 para inverter um inteiro ou 2 para inverter uma string. Bem, inverter é fazer com que ele mostre o valor digitado ao contrário, se eu digitar 12, ele retorna 21. Se eu digitar variavel, ele retorna levairav.

O erro agora é que ele faz loucuras! Eu digito 12, e vejam o que ele retorna:

0-1208435072-1078255236134514155-1078255384-1078255404-1208435088134513369-10782554161345191560-1208430188-1208358000-1209642584-1078255404-1078255244-1208360960-1078255328246414220883-12084350000-107825545210-12083572801-1208360624-107825545213451306824641422134513230-1208322881-1078255384134513230-1208360548-1208263520-1208357280-12083573283-1208358000-1209674696-1209639112-12096180260003213451318412

Isso tá longe de parecer 21... o que está acontecendo?


5. Re: Erro no script...

Diego da Silva de Medeiros
diegotosco

(usa Slackware)

Enviado em 21/01/2006 - 00:08h

Não sei se era essa a sua intensão, mas o scanf() da opção 2 está escrito assim: scanf("%s", &STRING[digito]); quando era para ser escrito assim: scanf("%c", &STRING[digito]);. Ou seja, você está dizendo à scanf() que ela receberá uma string e está atribuindo à uma variável caractere. Lembre-se que "A" é diferente de 'A'.

Uma outra coisa, que talvez seja a razão do erro, é que quando você iguala TAM à digito e depois a usa para imprimir de trás para frente a string, você deve desconsiderar o ponto, por isso TAM = digito - 1;.

Tente isso talvez funcione...

falow


6. Re: Erro no script...

Perfil removido
removido

(usa Nenhuma)

Enviado em 30/01/2006 - 20:37h

Ops! Eu me confundi mesmo na parte do %s, é %c mesmo, mas isso não vem bem ao caso pois eu nem testei o inversor de strings...

Mas quanto ao resto, a parte em que for inverte a variável eu copiei de um livro, não acho que deve ter um erro no for não... Mas quanto a parte do TAM, vou ver se resolve. Mas acho que isso não tem nada a ver com a estranha sequência que o script retorna.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts