elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


  Mostrar Mensajes
Páginas: 1 ... 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [21] 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 ... 160
201  Programación / Programación C/C++ / Re: [AYUDA] Soy nuevo en C y tengo un problema con un codigo de 12 lineas simple en: 31 Octubre 2014, 16:03 pm
y ese while al final y simple??? porque no tiene nada adentro?
Porque en C es obligatorio indicar el cuerpo de un bucle.

En el caso que comentas:
Código
  1. {
  2.   int ch;
  3.  
  4.   while ((ch = getchar()) != EOF && ch != '\n')
  5.      ; /* sentencia nula ==> ninguna operacion */
  6. }
La operación necesaria (descarte del resto de la linea) se realiza en la condición del bucle, no hay nada mas que hacer pero las reglas del lenguaje imponen indicar el cuerpo si o si. Por ello utilizamos una sentencia nula (nada) la cual se indica con el punto y coma inmediatamente después de la condición.

----

Código
  1. scanf("%[^\n]%c" , temp);

Espero no haberte liado más, sino todo lo contrario y no haber metido la pata con la explicación
Toda la explicación es correcta salvo un detalle en esa llamada a función: al utilizar "%c" se debe indicar mediante un puntero la variable donde se almacenara el carácter, si se desea simplemente descartar al susodicho se debe utilizar "%*c".

Un saludo
202  Programación / Programación C/C++ / Re: [AYUDA] Soy nuevo en C y tengo un problema con un codigo de 12 lineas simple en: 30 Octubre 2014, 17:26 pm
Algunos comentarios ...

tambien
Código
  1. fseek(stdin,0,SEEK_END);
que usa la busqueda para en el buffer de entrada (stdin) pararse al final
El problema con fseek es que tal vez funcione o tal vez no, mejor utilizar un bucle para descartar el resto de la linea:
Código
  1. {
  2.   int ch;
  3.  
  4.   while ((ch = getchar()) != EOF && ch != '\n')
  5.      ;
  6. }
Se debe comparar contra EOF para evitar el caso donde la función getchar falla, retorna EOF y ello resulta en un bucle infinito.


* Si quisieras seguir usando scanf para captar la cadena con espacios usarías:

Código
  1. scanf("%[^\n]s", temp) ;
Cuando se desea indicar un conjunto de caracteres el especificador de formato es "%[]", la 's' después de este no hace daño pero esta de mas.


leosansan yo intenté eso pero me dice que ^\n no fue reconocido :s por eso ni lo intenté
Si estas compilando el código fuente como C debería reconocerlo, es la forma de indicar que los caracteres validos son los distintos al conjunto indicado.


Digo mas que nada porque el bucle infinito me parece como mala práctica.
Depende del programa si un bucle infinito es valido o no.

Un saludo
203  Programación / Programación C/C++ / Re: Hacer un programa en C que me de la cantidad de divisores en: 29 Octubre 2014, 17:14 pm
Solo agregar que la condición de la sentencia de selección if esta mal ya que divide por "div" (una variable no declarada):
Código
  1. if ((N % div) == 0){
Para solucionarlo se debe dividir por el contador del bucle "i":
Código
  1. if ((N % i) == 0){

Un saludo
204  Programación / Programación C/C++ / Re: Ayuda con interprete de mi propio lenguaje de script sencillo en: 28 Octubre 2014, 02:28 am
Porque para usar strcmp, strcpy etc tienes que incluir #include <string.h>
Cierto, falta ese encabezado.

y has utilizado mal "strncpy" porque solo admite dos argumentos.
La función strncpy es parte de la biblioteca estándar de C.

Un problema con ella es que copia los caracteres del origen al destino, como máximo los indicados por su tercer argumento pero si copia ese máximo no agrega el terminador de cadena '\0', en su lugar se puede utilizar la función sprintf en la forma:
Código
  1. /* strncpy(current_instruction, current_line, 16); */
  2. sprintf(current_instruction, "%.*s", 15, current_line);

Un saludo
205  Programación / Programación C/C++ / Re: Manejo de Archivoc en C++ en: 28 Octubre 2014, 02:00 am
Lo primero que debes hacer es evitar el uso de la biblioteca conio de Borland, las razones de ello se explican en el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

Ademas:

* Hay que cambiar el nombre del encabezado <string.h> ya que el nombre correcto es <cstring>, eliminar la variable "i" ya que no la utilizas en el programa y acortar algunas partes, por ejemplo este bloque:
Código
  1. char palabra[20];
  2.  
  3. strcpy (palabra,"argentina");
  4. entrada<<palabra<<endl;
  5. entrada.close();
Se puede reducir con el mismo efecto a solo:
Código
  1. entrada << "argentina" << endl;
  2. entrada.close();

* Si no utilizas los argumentos pasados mediante la linea de comandos cambia la definicion de la funcion principal a "int main() ...".

* Hay que cambiar los nombres de las variables para el manejo de archivos ya que abren la puerta a errores lógicos, esto porque el archivo de salida (a donde envías los datos) se llama "entrada" mientras que el archivo de entrada (leer los datos del archivo) se llama "salida".

* Debido a la forma del bucle donde lees e imprimes las palabras la primera se descarta (no se imprime):
Código
  1. getline(salida,palabra);
  2. while (!salida.eof()){
  3.   getline(salida,palabra);
  4.   cout<<palabra<<endl;
  5. }
Para corregirlo basta con utilizar el valor de retorno de la función getline:
Código
  1. string palabra;
  2. while (getline(salida,palabra))
  3.   cout<<palabra<<endl;

----

En cuanto a la impresión de una palabra al azar leída del archivo lo primero que debes hacer es ... enviar mas de una palabra al archivo, por ejemplo con:
Código
  1. } else {
  2.   entrada << "Hugo" << endl;
  3.   entrada << "Paco" << endl;
  4.   entrada << "Luis" << endl;
  5.   entrada.close();
  6.  
  7.   cout<<"Los datos fueron almacenados correctamente\n"<<endl;
  8. }

A continuación lees cada una de las lineas y las almacenas en un vector de cadenas utilizando las clases vector y string, los encabezados a incluir son <vector> y <string>. Para seleccionar una utilizas la funciones srand y rand. Mas o menos así:
Código
  1. int main()
  2. {
  3.   srand((unsigned) time(0));
  4.  
  5.   // ...
  6.  
  7.   } else {
  8.      vector<string> palabra;
  9.      string aux;
  10.      while (getline(salida, aux))
  11.         palabra.push_back(aux);
  12.  
  13.      int i = rand() % palabra.size();
  14.      cout << palabra[i] << endl;
  15.   }
  16.   salida.close();

Un saludo
206  Programación / Programación C/C++ / Re: Problema con cadena de caracteres en C. en: 28 Octubre 2014, 01:20 am
Recomendación personal amigo. Siempre cuando estés leyendo muchas cadenas de caracteres ocupa
Código
  1. fflush(stdin);
El uso de fflush(stdin) no se recomienda, las razones de ello en el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

Un saludo
207  Programación / Programación C/C++ / Re: Ayuda en C++ en: 27 Octubre 2014, 02:02 am
algo como:

char num_en_caracteres[10];
int num=2437;
int cant_dig;

num_en_caracteres[10]=atoi(num) //Atoi transforma un numero a cadena.
No funcionara porque los indices validos del array son [0, 9], el operador de asignación "=" no puede utilizarse con arrays y porque el valor de retorno de la función atoi es de tipo int.

Si lo que quieres es almacenar cada uno de los dígitos del numero en el array (como los caracteres '0' .. '9') puedes utilizar la función sprintf, de esta forma:
Código
  1. sprintf(num_en_caracteres, "%d", num);
Con el detalle de ser una forma mas propia de C que de C++, con este ultimo lo primero que se me ocurre es utilizar las clases string y stringstream.

Un saludo
208  Programación / Programación C/C++ / Re: consejos sobre programa en: 27 Octubre 2014, 01:47 am
El problema que tengo ahora es al meter el valor erróneo de a == letra, he puesto un break para acabar el programa, realmente quiero que me vaya al loop de while para volver a empezarlo de nuevo, como lo puedo hacer? lo mismo con b y c.
Solo tienes que colocar la lectura y validación de cada variable en un bucle, dos ejemplos de ello en los temas que mencione en mi primer mensaje.

Pero si piensas utilizar el operador ">>" debes descartar el resto de la linea con la función sync o ignore, ejemplos de ambas los puedes consultar mediante el motor de búsqueda de los foros.

Un saludo
209  Programación / Programación C/C++ / Re: consejos sobre programa en: 26 Octubre 2014, 15:52 pm
como puedo conseguir que el usuario no pueda meter letras para que de un error
En C++ estándar no puedes bloquear la pulsación de teclas, para ello debes utilizar una biblioteca de terceros o el API del SO.

En su lugar lo que puedes hacer es leer una linea de texto y validar su contenido, dos temas sobre ello son:
duda c++
Leer un char como float

Un saludo
210  Programación / Programación C/C++ / Re: Problema con cadena de caracteres en C. en: 26 Octubre 2014, 06:24 am
El programa debe funcionar correctamente si agregas al principio de este las directivas de inclusión:
Código
  1. #include <stdlib.h> /* srand y rand */
  2. #include <time.h>   /* time */

Y no es necesario que incluyas <string.h>, en cuanto a conio la deberías evitar por las razone que se indican en el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

Un saludo
Páginas: 1 ... 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [21] 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 ... 160
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines