Advertisement
4ndl23y

sem4_2

Apr 25th, 2017
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.14 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #define NUM 100
  6.  
  7. void vivod(char **strStr, int *N){
  8.     for(int i=0; i<*N; i++){ printf("%s\n", strStr[i]); } //вывод N строк
  9.     printf("\n");
  10. }
  11. void moveStr(char **strStr, int *N){ //сдвиг строк, удаление 0-ой и освобождение N-ой для записи новой
  12.     int i;
  13.     printf("удалить: %s\n", strStr[0]);
  14.     printf("последняя строка: %s\n", strStr[*N-1]);
  15.     for(i=0; i<=*N; i++){
  16.         printf("%s<>%s|",strStr[i], strStr[i+1] );
  17.         strStr[i]=strStr[i+1];
  18.     }
  19.     vivod(strStr, N);
  20. }
  21. void readFile(char **strStr, char *Fname, int *N){
  22.     int i=0;
  23.     FILE *Ftext;
  24.     Ftext=fopen(Fname, "r");
  25.     printf("файл открыт\n");
  26.     fgets(strStr[i], NUM-2, Ftext);
  27.     do{ //чтение строки из файлa
  28.         printf("новая строка %s\n", strStr[i]);
  29.         if(i<*N){ i++; }
  30.         else{ moveStr(strStr, N);}
  31.     }while(fgets(strStr[i], NUM-2, Ftext));
  32.     fclose(Ftext);
  33.     printf("файл закрыт\n");
  34. }
  35. int main(char argc, char *argv[]){
  36.     char *str[NUM], **strStr, *Fname;
  37.     int N=10, mode=0, i=0;
  38.  
  39.     for(int argNumb=1; argNumb<argc; argNumb++){ //обработка аргументов программы
  40.         if(strcmp(argv[argNumb], "--help")==0 || strcmp(argv[argNumb], "-h")==0){ mode=0; }// help
  41.         else if(strcmp(argv[argNumb], "-N")==0 || strcmp(argv[argNumb], "-n")==0){ N=atoi(argv[argNumb+1]); argNumb++; } // N
  42.         else if(strcmp(argv[argNumb], "-p")==0){ mode=1; Fname=argv[argNumb+1]; argNumb++; }// чтение из файла
  43.     }
  44.  
  45.     for(i=0; i<NUM; i++){
  46.         str[i]=malloc(NUM*sizeof(char));
  47.     }
  48.     strStr=malloc((N+2)*sizeof(char*));  //выделяем память под массив указателей
  49.     for(i=0; i<(N+1); i++){
  50.         strStr[i]=&str[i][0]; //указываем на строки
  51.     }
  52.  
  53.     switch(mode){ //выбор способа ввода
  54.         case 0: printf("-n -- значение N (по умолчанию N=10);\n-p -- путь к файлу;\n"); break;
  55.         case 1: readFile(strStr, Fname, &N); vivod(strStr, &N); break;
  56.         //case 2: break;
  57.     }
  58.     free(strStr);
  59.     free(*str);
  60.     return 0;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement