Вывести список имен файлов и директорий (имена директорий перед именами файлов) с сортировкой по расширению. Ну в общем нужно сделать проверку команды DIR так как это сделано в самой DOS. Вот то что у меня получилось. | Код | #include<stdio.h> #include<conio.h> #include<string.h> #include<ctype.h>
void main() { int i,j,m,fl1,fl2; char s[50],s1[20],s2[20];
clrscr(); printf("Команда dir vivodit failu i podkatologi v ykazanom kataloge\n\ DIR /O[[:]poridok sortirovki]] [/P]\n\n\ DIR /O:E\n\ ______________________________________________________________________\n"); printf("Введите строку с командой DIR\nC:\\>"); /*scanf("%s",s);*/ i=0; while((s[i++]=getchar())!='\n') if(i>50) break; s[i-1]='\0'; strlwr(s); //printf("s=%s\n",s);
while ((isspace(s[i]))&& s[i]) i++; // if(!s[i])
if(strncmp(s,"dir ",4)==0) printf("Введена команда = \"DIR\",\nkotoraia pozvoliaet vivodit failu i podkatalogi v ykazanom kataloge\n"); else { printf("Ошибка в задании имени команды\n"); goto kon; } /*копирование в s1 параметров команды;*/ i=9; while((isspace(s[i]))&& s[i]) i++;//Пропуск пробелов до первого параметра if(!s[i]) { printf("\nОтсутствуют параметры команды\n"); goto kon; }
j=0;//заносим в s1 первый параметр команды while(s[i]&&(!isspace(s[i]))) s1[j++]=s[i++]; s1[j]=0; //printf("s1=%s\n",s1); while((isspace(s[i]))&& s[i]) i++;//Пропуск пробелов до второго параметра j=0; //заносим в s2 второй параметр команды while(s[i]&&(!isspace(s[i]))) s2[j++]=s[i++]; s2[j]=0; //printf("s2=%s\n",s2); while((isspace(s[i]))&& s[i]) i++;//Пропуск пробелов до третьего параметра if(s[i]) { printf("\nВведены лишние параметры\n"); goto kon; } //Введен один параметр команды printf("с параметрами заданными в файле "); fl1=1; m=0; if((strlen(s1))<=12) { for(i=0;i<(strlen(s1));i++) { if((s1[i])=='/') { m=i; if(ispunct(s1[strlen(s1)-1])||(ispunct(s1[0]))) { fl1=0; break; } if(i>8) { fl1=0; break; } else if((strlen(s1)-i)>4) { fl1=0; break; } else for(i=(m+1);i<(strlen(s1));i++) if(ispunct(s1[i])) { fl1=0; break; } } else if(m) { fl1=0; break; } else if((i==(strlen(s1))-1)&&(!m)) { fl1=0; break; } } if(fl1&&fl2) puts(s1); else printf("\n\nОшибка задания имени файла\n "); } else printf("\n\nОшибка задания имени файла\n ");
if(s2[0]) //есть два параметра. { if((strlen(s2)<=4)&&(strlen(s2)>=3)&&(s2[0]=='/')) { if((s2[1]=='o'))//&&(s2[2]=='w')&&(!s2[3])) printf("\nDIR vipolniaet sortirovku.\n"); if((s2[1]=='o')&&(s2[2]=='e')) printf("\nVipolniaetsa sortirovka po rasshireniu.\n"); if((s2[1]=='m')&&(s2[2]=='d')&&(s2[3]=='a')) printf("\nmsbackup запускается с использованием монохромного адаптера.\n"); } else printf("\nOshibka\n"); }
kon: printf("\nДля выхода нажмите любую клавишу\n"); getch(); }
|
Подскажите как сделать чтобы DIR можно было вводить маленькими и большими литерами, и чтобы можно было вводить пробелы до DIR.
|