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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / Tutorial para multihilos en C (windows.h) en: 26 Agosto 2016, 15:27 pm
Saludos a todos
Llevo un rato buscando un tutorial, libro, manual o lo que sea respecto a multihilos en C, y solo encuentro para la libreria pthread.h por lo que no me sirve.
Necesitaria para la libreria de Windows, windows.h. Por favor, si conocen de alguna, mandemen un Link o lo que sea
Muchas gracias
2  Programación / Programación C/C++ / Re: Funcion borrar elemento de una lista STRUCT en: 17 Agosto 2016, 17:14 pm
Si he usado un par de llos estaticos.
Es la primera vez que hago un programo con listas enlazables... Me falla la funcion de borrar, pero cuando solo existe un usuario, si me que lo borrar, ahora me gustaria borrarlos cuando hay varios (lo de borrar segun el nombre, no me ha llegado a funcionar pero primero que me funcione lo anterior...)

Muchas gracias por tu respuesta!!  ;D ;D
Aquie te dejo el codigo del programa entero
Código
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. /*+-------------------------------------------------------------------+*/
  7. /*| Defines                                                           |*/
  8. /*+-------------------------------------------------------------------+*/
  9.  
  10. /*+-------------------------------------------------------------------+*/
  11. /*| Structs & Definitions                                             |*/
  12. /*+-------------------------------------------------------------------+*/
  13.  
  14. //Define the structure list_user
  15. struct dsd_list_user
  16. {
  17.    char chrc_firstname[20];
  18.    char chrc_lastname[20];
  19.    char chrc_address[50];
  20.    char chrc_age[2];
  21.    dsd_list_user *adsc_next;
  22. };
  23.  
  24. /*+-------------------------------------------------------------------+*/
  25. /*| Global Variables                                                  |*/
  26. /*+-------------------------------------------------------------------+*/
  27.  
  28. /*+-------------------------------------------------------------------+*/
  29. /*| Static Variables                                                  |*/
  30. /*+-------------------------------------------------------------------+*/
  31.  
  32. //Create a variable to assign the strcture
  33. //struct list_user user[MAX_USERS];
  34.  
  35. /*+-------------------------------------------------------------------+*/
  36. /*| Internal function prototypes.                                     |*/
  37. /*+-------------------------------------------------------------------+*/
  38.  
  39. // For starters, it should contain a structure which will keep 4 fields:
  40. // -- Firstname
  41. // -- Lastname
  42. // -- Age
  43. // -- Address
  44. // -- (and the next pointer, of course)
  45.  
  46. // Also, I would like you to implement some functions in order to interact with the list,
  47. // for starters, the basic ones which need to be defined are:
  48. // -- add/remove element from the list
  49. // -- print the whole list
  50. // -- print a specific element of the list
  51.  
  52. //Create pointers for the first and last user
  53. static struct dsd_list_user *dss_first, *last, *dss_temp;
  54.  
  55.  
  56. //Function which shows the main menu with four options
  57. void show_menu()
  58. {
  59.    printf("Menu: \n");
  60.    printf("1- Add a new user\n");
  61.    printf("2- Delete a user\n");
  62.    printf("3- Show the user's list\n");
  63.    printf("4- Exit\n\n");
  64.    printf("Choose a option: ");
  65.    fflush(stdout);
  66.    //printf("\n\n\n");
  67.    //scanf("%i",&ins_option_menu);
  68. }
  69. //#define SCANF
  70. //Function which adds a new user
  71. void add_user()
  72. {
  73.    //Create a pointer for add new users
  74.    struct dsd_list_user *new_user;
  75.  
  76.    //Keep memory for the new user
  77.    new_user = (struct dsd_list_user *) malloc(sizeof(struct dsd_list_user));
  78.  
  79.    //Show the fields to fill for creating a new user
  80.    printf("\nNEW USER\n");
  81.    printf("\nFirst Name: ");
  82.    fflush(stdin);
  83. #ifdef SCANF
  84.    scanf("%s",new_user->chrc_firstname);  
  85. #else
  86.    gets(new_user->chrc_firstname);
  87. #endif // SCANF
  88.    fflush(stdin);
  89.    printf("Last Name: ");
  90. #ifdef SCANF
  91.    scanf("%s",new_user->chrc_lastname);  
  92. #else
  93.    gets(new_user->chrc_lastname);
  94. #endif // SCANF
  95.    fflush(stdin);
  96.    printf("Address: ");
  97. #ifdef SCANF
  98.    scanf("%s",new_user->chrc_address);  
  99. #else
  100.    gets(new_user->chrc_address);
  101. #endif // SCANF
  102.    fflush(stdin);
  103.    printf("Age: ");
  104. #ifdef SCANF
  105.    scanf("%s",new_user->chrc_age);  
  106. #else
  107.    gets(new_user->chrc_age);
  108. #endif // SCANF
  109.  
  110. //The last user of the list is always null
  111.    new_user->adsc_next = NULL;
  112.  
  113.    //Check if there are more users in the list
  114.    if (dss_first==NULL)
  115.    {
  116.        //If there are not users, show the user is the first
  117.        printf("\nFIRST USER\n");
  118.        //So, the new and first user, will be the first and last user.
  119.        dss_first = new_user;
  120.        last = new_user;
  121.    }
  122.  
  123.    //If there are users, assign the new user to the next and obiously to the last user.
  124.    else
  125.    {
  126.        last->adsc_next = new_user;
  127.        last = new_user;
  128.    }
  129.    printf("USER CREATED\n\n");
  130. }
  131.  
  132. //Function which drops an user
  133. void drop_user()
  134. {
  135.    struct dsd_list_user *dsl_current_user;
  136. //struct dsd_list_user *dsl_temp_user;
  137. struct dsd_list_user *dsl_previous_user;
  138. //struct dsd_list_user *dsl_next_user;
  139. //struct dsd_list_user *dsl_first_user;
  140. dsd_list_user *dsl_next;
  141.  
  142. //Variable to indicate the number of user
  143.    //int i = 0;
  144.    int number_user = 0;
  145. int inp_index = 0;
  146.  
  147.    //Assign that pointer to the first user
  148.    dsl_current_user = dss_first;
  149. dsl_previous_user = last;
  150.  
  151.  
  152. //Check if there are users in the list
  153.    if (dsl_current_user==NULL)
  154.    {
  155.        //If there are not users, show the user is the first
  156.        printf("\nThere are no users to drop\n\n");
  157.        return;
  158.    }
  159.  
  160. //If there are just one user
  161. if (dsl_current_user->adsc_next == NULL)
  162. {
  163. printf("Only one user in the list to drop.");
  164. //fflush(stdin);
  165. //gets(dsl_current_user->chrc_firstname);
  166. free(dss_first);
  167. dss_first = NULL;
  168. last = NULL;
  169. return;
  170. }
  171.  
  172. //p_gotto:
  173. while (dsl_current_user != NULL)
  174. {
  175.  
  176. if(dsl_current_user->adsc_next != NULL)
  177. {
  178. printf("There are more of one user in the list:");
  179. //fflush(stdin);
  180. //gets(dsl_current_user->chrc_firstname);
  181. //dsl_current_user->adsc_next=dsl_previous_user;
  182. //dsl_current_user = dsl_current_user->adsc_next;
  183. free(dsl_current_user->adsc_next);
  184. dsl_current_user->adsc_next = NULL;
  185. //last = NULL;
  186. return;
  187. }
  188. }
  189.  
  190. //goto p_gotto;
  191. }
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198. //Function which shows the full list
  199. void show_list()
  200. {
  201.    //Create a pointer for show the full which indicate the current user to show in the list
  202.    struct dsd_list_user *dsl_current_user;
  203.  
  204.    //Variable to indicate the number of user
  205.    int i = 0;
  206.  
  207.    //Assign that pointer to the first user
  208.    dsl_current_user = dss_first;
  209.  
  210.    //Start to show the full list
  211.    printf("\n\nShowing the full list:\n\n");
  212.  
  213.    //Create a while to show the current user in that moment
  214.    //Obiously, while the current user is not NULL
  215.   if(dsl_current_user == NULL)
  216.   {
  217.  printf("There are not users in the list\n\n");
  218.   return;
  219.   }
  220.  
  221. while(dsl_current_user != NULL)
  222.    {
  223.        //Show the data of users
  224.        printf("User number: %i \n\n", i+1);
  225.        printf("First Name: %s\n", dsl_current_user->chrc_firstname);
  226.        printf("Last Name: %s\n", dsl_current_user->chrc_lastname);
  227.        printf("Address: %s\n", dsl_current_user->chrc_address);
  228.        printf("Age: %s\n\n\n", dsl_current_user->chrc_age);
  229.  
  230.        //Assign the next user to the current for the next repetition
  231.        dsl_current_user = dsl_current_user->adsc_next;
  232.  
  233.        //Pass to the next user
  234.        i++;
  235.    }
  236.  
  237.    //If the number of users is 0 -> the list is empty
  238.    if (i==0) printf("The List is empty\n\n");
  239. }
  240.  
  241. /*+-------------------------------------------------------------------+*/
  242. /*| Main control procedure.                                           |*/
  243. /*+-------------------------------------------------------------------+*/
  244.  
  245. int main()
  246. {
  247.    //int ins_option_menu;
  248.    int option;
  249.  
  250.  
  251.  
  252.    do
  253.    {
  254.        show_menu();
  255.        option = getchar();
  256.  
  257.        //Depending of the option selected, start a function or exit.
  258.        if (option=='1')
  259.        { add_user(); }
  260.        if (option=='2')
  261.        { drop_user();}
  262.        //{ printf("\nNot configurated\n\n"); }
  263.        if (option=='3')
  264.        { show_list(); }
  265.        if (option=='4')
  266.        { return 0; }
  267.        if(option < '1' || option > '4')
  268.        { printf( "\nOption incorrect\n\n" ); }
  269.        fflush(stdin);
  270.    }
  271.    while(option != 4);
  272.    printf("\n\n");
  273.    //system("pause");
  274.    //goto p_goto;
  275. }
  276.  
  277.  
  278. /*+-------------------------------------------------------------------+*/
  279. /*| FINAL                                                             |*/
  280. /*+-------------------------------------------
  281.  
3  Programación / Programación C/C++ / Funcion borrar elemento de una lista STRUCT en: 17 Agosto 2016, 14:09 pm
Este funcion deberia borrar un elemento de una lista STRUCT pero no llega a funcionar
Código
  1. void drop_user()
  2. {
  3.    struct dsd_list_user *dsl_current_user;
  4. struct dsd_list_user *dsl_temp_user;
  5.  
  6. dsl_temp_user=head;
  7.  
  8.    //Variable to indicate the number of user
  9.    //int i = 0;
  10.    int number_user = 0;
  11.  
  12.    //Assign that pointer to the first user
  13.    dsl_current_user = dss_first;
  14.  
  15.    //Check if there are users in the list
  16.    if (dsl_current_user==NULL)
  17.    {
  18.        //If there are not users, show the user is the first
  19.        printf("\nThere are no users to drop\n\n");
  20.        return;
  21.    }
  22.  
  23.    //If there are just one user
  24.    if (dsl_current_user->adsc_next == NULL)
  25.    {
  26.        printf("Only one user to drop it.\n");
  27. printf("Indicate the First Name of the user which you want drop it:");
  28. //gets(dsl_current_user->chrc_firstname);
  29. free(dsl_current_user);
  30. //dsl_current_user = NULL;
  31. return;
  32. //dsl_current_user = dsl_current_user->adsc_next;
  33.    }
  34. while (dsl_current_user != NULL)
  35. {
  36. printf("Indicate the First Name of the user which you want drop it:");
  37. gets(dsl_current_user->chrc_firstname);
  38. free(dsl_current_user);
  39. dsl_current_user = dsl_current_user->adsc_next;
  40. }
  41. }
  42.  
  43.  
4  Programación / Programación C/C++ / Crear mis propias funciones que hagan de: strcpy, strlen, strcmp, strcat en: 12 Agosto 2016, 11:49 am
Saludos, estoy buscando la manera de crear mis propias funciones que correspondan a las sigueintes: strcpy, strlen, strcmp, strcat
He conseguido realizar strcpy, y strcmp.
Pero deberia hacerlo sin las funciones for, while y do: si asi es...
Gracias por leerme, y mas un si me ayudas :)
5  Programación / Programación C/C++ / Poner separador de miles a la hora de mostrar resultado en pantalla en: 11 Agosto 2016, 11:36 am
Saludos programadores.
He terminado un programa y me gustaria saber como incluir los separadores de miles a la hora de mostrar dicho resultado en pantalla. He estado investigando en Internet pero lo poco que he visto/entendido no he conseguido aplicarlo.
Gracias por leerme, y mas aun al que me responda :)

Este es el programa, siento que este en ingles...
/*+-------------------------------------------------------------------+*/
/*| System and library header files.                                  |*/
/*+-------------------------------------------------------------------+*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

/*+-------------------------------------------------------------------+*/
/*| Defines                                                           |*/
/*+-------------------------------------------------------------------+*/

//Maximum characters of the file cypher.txt
#define LIMIT_NAMES 6000

/*+-------------------------------------------------------------------+*/
/*| Structs & Definitions                                             |*/
/*+-------------------------------------------------------------------+*/

/*+-------------------------------------------------------------------+*/
/*| Global Variables                                                  |*/
/*+-------------------------------------------------------------------+*/

/*+-------------------------------------------------------------------+*/
/*| Static Variables                                                  |*/
/*+-------------------------------------------------------------------+*/

static char array_list_names[LIMIT_NAMES][50];
int ins_total_score = 0;


////Static variables for the time
static int ins_time_start;                  //Start time of NameLists
static int ins_time_stop;                  //Finish time of NameLists

/*+-------------------------------------------------------------------+*/
/*| Internal function prototypes.                                     |*/
/*+-------------------------------------------------------------------+*/

/*+-------------------------------------------------------------------+*/
/*| Explanation                                |*/
/*+-------------------------------------------------------------------+*/


//A 46K text file containing over five-thousand first names, begin by sorting it into alphabetical order.
//
//Then working out the alphabetical value for each name, multiply this value by its alphabetical position in the list to obtain a name score.
//For example, when the list is sorted into alphabetical order, COLIN, which is worth 3 + 15 + 12 + 9 + 14 = 53, is the 938th name in the list. So, COLIN would obtain a score of 938 × 53 = 49714.
//What is the total of all the name scores in the file?
//
//In order to sort the names, you will need to use qsort (http://www.cplusplus.com/reference/cstdlib/qsort/).
//It might be a bit tricky and difficult,
//i'll let you try alone if you want, but due to the pointer redirection you will need to apply in order to use the function, i'll gladly help you out - so don't hesitate to stop by and ask me.

/*+-------------------------------------------------------------------+*/
/*| Main control procedure.                                           |*/
/*+-------------------------------------------------------------------+*/

   //Function compare by default
   int m_compare (const void * vpp_a, const void * vpp_b)
      {
         return strcmp((char *) vpp_a, (char *) vpp_b);
         //return ( *(int*)a - *(int*)b );
      }
   //////////////////////////////////////////////

int main ()
{
     //Indicate time
   clock_t t_start, t_end;
   double secs;
   t_start = clock();
   //////////////////////////////////////////////////////////////////////////////////////
   


   //////////////////////////////////////////////////////////////////////////////////////
   //Procedure to count the words of the file names.txt and keep the array with all names
 
   //Open file to read it
   FILE *file_names;
   file_names = fopen("names.txt", "r+");
   
   //If the file is incorrect, indicate it and close the program
   if (file_names==NULL)
   {
      printf("File's content is incorrect.");
      system("pause");
      return -1;
   }
    // //Function to count the total names of the file
   // int ins_number_names = 0+1;
   //      while(!feof(file_names))
   //      {
   //            if(fgetc(file_names) == ',')
   //            {
   //                   ins_number_names++;
   //            }
   //      }
   //////Show the total number of names
   //printf("\nThe Number of names of the file names.txt is %d\n", ins_number_names);
   //system("PAUSE");      

   //Variable to keep the total number of names
   int ins_number_names = 0;

   //Start a while to know the number of names, and keep all names in one array
   while(!feof(file_names) && ins_number_names < LIMIT_NAMES)
   {
      //Initial lenght for every name
        int lenght_names = 0;
      //Other characters of the file, in this case, the commas ','
        char other_char;
      //Limit of characters of the names
        char limit_char_names[50];

      //Exclude the commas ',' and double quotation marks ' " " ' to can counting the names
        while((other_char = fgetc(file_names)) != ',' && !feof(file_names))
      {
            if(other_char == '\"'){
                continue;
            }
            else{
                limit_char_names[lenght_names] = other_char;
                lenght_names++;
            }
        }
        limit_char_names[lenght_names] = '\0';

      //Keep with strcpy the names in the array array_list_names
        strcpy(array_list_names[ins_number_names],limit_char_names);
        ins_number_names++;
   }

   //Close the file names.txt
   fclose(file_names);
   /////////////////////////////////////////////////////////////////////////////////////



   //Show the array with all names to check it
   /*   for(int i = 0; i < ins_number_names; i++)
         {
         printf("%s ",array_list_names);
         }*/
   
   printf("\nThe total number of names is: %i\n",ins_number_names);
   system("PAUSE");
   
   
   //Start the function to sort all names in alphabetical order
   qsort (array_list_names, ins_number_names, 50, m_compare);
   
   //Show the array sorted to check the function sort
   /*for(int i=0; i<ins_number_names;i++)
      {
      printf ("%s ",array_list_names);   
      }*/
      
   //Start with the operations to calculate the name score and total score
   
   //Assign to every word of every name a value which will be the position of the letter
   for(int i1=0; i1<ins_number_names;i1++)
   {
      //Variable to indicate the sum
      int ins_sum=0;
      //Variable ins_number_char_names to know the lenght of the name
      int ins_lenght_names = strlen(array_list_names[i1]);

      for(int i2=0; i2<ins_lenght_names; i2++)
         {
         //Calculate the score of every character
         ins_sum += array_list_names[i1][i2] - 'A' + 1;
         }
      
      //Calculate the values
      int ins_value = ins_sum * (i1+1);
      //Calculate the total score
      ins_total_score += ins_value;
   }

   //Show the total score os the file names.txt
   printf("The total score of all names is: %i\n", ins_total_score);
   system("pause");
   ////////////////////////////////////////////////////////////////////////////////////


   //Show time
   t_end = clock();
   secs = (double)(t_end - t_start) / CLOCKS_PER_SEC;
   printf("Time used to process the names list and calculate the total score names: %.16g miliseconds", secs * 1000.0);
   printf("\n\n");
   /////////////////////////////////////////////////////
   
   system("pause");
   return 0;
   
   }

/*+-------------------------------------------------------------------+*/
/*| FINAL                                                             |*/
/*+-------------------------------------------------------------------
6  Programación / Programación C/C++ / Re: Guardar palabras entre " " y separadas por comas en un array. Lenguaje C en: 11 Agosto 2016, 11:33 am
Muchas gracias AlbertoBSD.
7  Programación / Programación C/C++ / Guardar palabras entre " " y separadas por comas en un array. Lenguaje C en: 10 Agosto 2016, 15:52 pm
Saludos, este es mi primer tema.
Dispongo de un archivo.txt con mas de 5.000 nombres separados por comas y entre comillas.
Me gustaria saber como guardar todos ellos en un array.
Gracias por leerme y mas un por vuestra futura respuesto.
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines