Questão:
Esse código em C++ está correto? (String)?
Ramon
2011-10-23 09:40:24 UTC
Toda vez que executo dá erro e quero saber se isso está certo:

#include
#include

int main( ) {
char nome[10];
int a;
printf("Qual palavra v quer ver ao contrario? ");
scanf("%s", nome);
for(a = 9; a >= 0; a--) {
printf(nome[a]);
}
system("PAUSE");
return 0;
}
Quatro respostas:
AdH
2011-10-23 10:01:02 UTC
Primeiro e mais importante: não há uma única linha de C++ aí.



Tem alguns erros óbvios com seu código. Você está assumindo que o buffer/string terá exatamente 10 caracteres, e está lendo o buffer completo. Isso não vai funcionar como esperado, pois se eu entrar com "abc", por exemplo, você vai ler partes do buffer que contém valores aleatórios. Para resolver isso, compute o tamanho da string passada, não do buffer.



Segundo, você está passando um caractere(char) para uma função(printf) que recebe um ponteiro para um buffer de caracteres(char *). Aqui uma versão correta:



#include

#include



int main( ) {

....char nome[256];

....signed int a;

....unsigned size;



....printf("Qual palavra v quer ver ao contrario? ");

....scanf("%s", nome);

....fflush(stdin);



....for(size = 0; nome[size]; size++);



....for(a = --size; a >= 0; a--) {

........printf("%c", nome[a]);

}



....getchar();



....return 0;

}



Explicação:



C usa strings terminadas em 0. Ou seja: um byte 0(zero) na seqüência de caracteres demarca seu final. Portanto, se desejamos saber o tamanho da string, basta calcular quantos caracteres temos até encontrar um byte 0. Essa linha: "nome[size]", faz exatamente isso. No loop for, continuamos enquanto nome[size] retornar um valor diferente de zero(true/verdadeiro). Em C, 0 é false, e qualquer outra coisa representa true, portanto, enquanto nome[size] for diferente de zero, continuamos. Note que nome[size] é o mesmo que nome[size] != 0.



Sabendo o tamanho da string, basta começar a ler do último caractere, e terminar ao atingir size 0.



PS: Não use system sem um bom motivo, e não há razão alguma aqui.



PS²: A linha flush(stdin) dá um flush na entrada padrão, retirando qualquer caractere "nova linha" que possa aparentemente invalidar getchar.
Erik
2011-10-23 17:02:00 UTC
na linha que diz

printf(nome[a]);



o certo é

printf ("%c", nome[a]);
Duduindo
2011-10-23 16:44:59 UTC
puts.. só manjo em PHP, Python, css e javascript.



=/
Viviane Marino
2011-10-23 16:43:23 UTC
Não tenho certeza, mas eu acho que é aquele v, muda pra outra váriavel, faz tempo que não mexo com isso


Este conteúdo foi postado originalmente no Y! Answers, um site de perguntas e respostas que foi encerrado em 2021.
Loading...