[C con Clase] Duda

Zakariae El-Abdelouarti Alouaret shanatorio en gmail.com
Lun Feb 28 22:37:43 CET 2011


El 28/02/11 21:01, dmp dmp escribió:
> /*Hola!
> Estoy intentando hacer un programa en el que pongas un texto y cambie
> las letras por la siguiente en el alfabeto Ej: a->b  b->c...
> He pensado en este código:*/
> #include <iostream>
> #include <cstdio>
> #include <cctype>
> using namespace std;
> int main()
> {
La siguiente función suele producir código no portable, así que sugiero 
que no la utilices.
>     system("color 0a");
>     char Code[1001];

Aquí estaría bien que usaras una constante para el tamaño del array,
una definición como "const int MAX_STRING_LENGTH = 1001" estaría bien.

>     int c=0;

Es mejor nombrar a los índices por i y cuando sepas el comienzo y final 
de un bucle, es mejor usar el for. En este caso, sería algo así:
for(int i = 0; i < MAX_STRING_LENGTH; i++) ...

>
>     while (c <=1001) {
>           Code[c]=0;
>           c++;
>     }
>
>     c=0;
>
>     cout << "Introduce el codigo a encriptar" << endl << endl;
>     cin >> Code;
>     cout << "" << endl;
>
Creo que no tienes clara la utilización de los bucles.
La condición de parada del primer bucle( c < 1001 ) depende de la 
variable c, que es modificada en el ámbito del otro bucle while ( 
Code[c] != '\0').

Yo creo que debería ser algo así:
while ( (c < 1001) && (Code[c] != '\0') {...
>     while (c<1001) {
La siguiente condición de terminación está mal debería ser:
Code[c] != '\0'
>           while (Code[c] != '0') {
No es necesario usar switch cuando solo hay dos bifurcaciones y con un 
if/else sería más claro.
>                 switch(Code[c]) {
>                                 case 'z':
>                                      Code[c]='a';
Repites el c++ aquí y en la otra bifurcación, eso quiere decir que tiene 
que estar fuera, en el ámbito inmediatamente superior.
>                                      c++;
>                                      break;
>                                 default:
>                                         Code[c]=Code[c]+1;
>                                         c++;
>                                         break;
>                 }
>           }
>     }
>
>
>     cout << "El codigo encriptado es " << Code << endl;
>     system("pause>nul");
>     return 0;
> }
> /*Sale el mensaje correcto, pero después salen símbolos extraños. ¿A que
> es debido?*/
>
>
Haz las modificaciones que te recomiendo y si tienes más problemas 
vuelve a preguntarnos.

Saludos.

Zaka.




Más información sobre la lista de distribución Cconclase