void sort_array(int *a, int n) { char c; int success; do { printf("\n\nSorting algorithms: "); printf("\n[1].-Bubble\n[2].-Selection\n[3].-Insertion\n[4].-No-Sorting"); printf("\nChoose:\t"); if(!(success = is_single_char(&c))) fflushstdin(); if(c < 49 || c > 52) printf("Please give a valid option\n"); } while(!success || c < 49 || c > 52); switch (c) { case '1': bubble_sort (a, n); break; case '2': selection_sort(a, n); break; case '3': insertion_sort (a, 0, n); break; case '4': printf("\nDATA STAYS THE SAME\n"); break; default: break; } }
char prompt(char *pass) { printf("Password: "******"%24s", pass); fflushstdin(); // Length ok? if(strlen(pass) > 20) return 0; // Check each character is in [a-zA-Z0-9] char *c = pass; while(*c != 0) { if((*c >= '0' && *c <= '9') || (*c >= 'A' && *c <= 'Z') || (*c >= 'a' && *c <= 'z') ) { // Valid character, go to the next one c++; } else { // Invalid return 0; } } // Passed all the tests, the password is clean return 1; }
void validate_int_read(int *num, char *s){ int success; do { printf("\n%s\t", s); if(!(success = is_number(num))) { printf("Please give a number\n"); fflushstdin(); } } while(!success); }
void validate_single_char_read(char *c){ int success; do { printf("\nNUMBER:\t"); if(!(success = is_single_char(c))) { printf("Please give valid option\n"); fflushstdin(); } } while(!success); }
float EnterRouteLength() { printf("Длина маршрута(км): "); float routeLength = 0.0; fflushstdin(); if (scanf("%f", &routeLength) != 1) { puts("Ошибка формата входных данных."); return EnterRouteLength(); } else { return routeLength; } }
int EnterCarsCount() { printf("Единиц транспорта: "); unsigned int carsCount; fflushstdin(); if (scanf("%d", &carsCount) != 1) { puts("Ошибка формата входных данных."); return EnterCarsCount(); } else { return carsCount; } }
void prompt(char *enteredPass) { printf("Password: "******"%24s", enteredPass); fflushstdin(); }
int f_print(int x) { int sh = 0, a = 0, l = 0, i = 0; struct str *s; FILE *file; file = fopen("file.txt", "r"); if (!file) { printf("\nОшибка файла\n\n"); return 1; } puts("\nВведите количество строчек, которой хотите вывести на экран (если не знайте содержимое файла, введите 100 или более)"); do { if (sh == 1) { fflushstdin(); } if (!scanf("%d", &a) || (a < 1) || (a > 1000)) { puts("Ошибка ввода. Введите заново"); } sh = 1; } while (!a || (a < 1) || (a > 1000)); sh = 0; a += P; puts("\nВведите max символьную длину имя, фамилии, отчества или группы (min 15)(если не знайте содержимое файла, введите 30 или более)"); do { if (sh == 1) { fflushstdin(); } if (!scanf("%d", &l) || (l < 15) || (l > 1000)) { puts("Ошибка ввода. Введите заново"); } sh = 1; } while (!l || (l < 15) || (l > 1000)); sh = 0; //Выделение памяти s = (struct str *)malloc(a * sizeof(struct str)); if (s == NULL) { printf("\nОшибка памяти\n"); return 1; } memory(a, l, s); for (i = 0; i < a; i++) { fscanf(file, "%s %s %s %s", s[i].name, s[i].sname, s[i].lname, s[i].gr); if (!*s[i].name) { if (x == 1) { printf("\nВсего в файле обнаружено %d строчка(ек) данных\n\n", i); } break; } if (x != 1) { printf("\n%s %s %s %s\n", s[i].name, s[i].sname, s[i].lname, s[i].gr); } } fclose(file); //Очищение памяти fmemory(a, l, s); free(s); return 0; }
int f_add() { int sh = 0, a = 0, l = 0, y = 0, x = -1, z = 0, i; struct str *s; FILE *file; char proverka[11] = "0123456789"; file = fopen("file.txt", "rb+"); if (!file) { printf("\nОшибка файла\n\n"); return 1; } puts("\nВведите количество строк, которые хотите добавить"); do { if (sh == 1) { fflushstdin(); } if (!scanf("%d", &a) || (a < 1) || (a > 1000)) { puts("Ошибка ввода. Введите заново"); } sh = 1; } while (!a || (a < 1) || (a > 1000)); sh = 0; puts("\nВведите max символьную длину имя, фамилии, отчества или группы (min 15)"); do { if (sh == 1) { fflushstdin(); } if (!scanf("%d", &l) || (l < 15) || (l > 1000)) { puts("Ошибка ввода. Введите заново"); } sh = 1; } while (!l || (l < 15) || (l > 1000)); sh = 0; l += 30; //Выделение памяти s = (struct str *)malloc(a * sizeof(struct str)); if (s == NULL) { printf("\nОшибка памяти\n"); return 1; } memory(a, l, s); fseek(file, 0, 2); for (y = 0; y < a; y++) { fflushstdin(); do { printf("\nВведите имя %d-го человека\n", y + 1); sh = 0; fgets(s[y].name, l, stdin); for (z = 0; z < 10; z++) { for (i = 0; i < l; i++) { if (proverka[z] == s[y].name[i]) { puts("Ошибка ввода. Введите заново"); sh = 1; free(s[y].name); s[y].name = (char *)calloc(l, sizeof(char)); } } } }while (sh == 1); do { printf("\nВведите фамилию %d-го человека\n", y + 1); sh = 0; fgets(s[y].sname, l, stdin); for (z = 0; z < 10; z++) { for (i = 0; i < l; i++) { if (proverka[z] == s[y].sname[i]) { puts("Ошибка ввода. Введите заново"); sh = 1; free(s[y].sname); s[y].sname = (char *)calloc(l, sizeof(char)); } } } }while (sh == 1); do { printf("\nВведите отчество %d-го человека\n", y + 1); sh = 0; fgets(s[y].lname, l, stdin); for (z = 0; z < 10; z++) { for (i = 0; i < l; i++) { if (proverka[z] == s[y].lname[i]) { puts("Ошибка ввода. Введите заново"); sh = 1; free(s[y].lname); s[y].lname = (char *)calloc(l, sizeof(char)); } } } }while (sh == 1); printf("\nВведите группу %d-го человека\n", y + 1); fgets(s[y].gr, l, stdin); fprintf(file, "%s %s %s %s", s[y].name, s[y].sname, s[y].lname, s[y].gr); } fclose(file); //Очищение памяти fmemory(a, l, s); free(s); f_sort(x); return 0; }
int f_remov() { int sh = 0, a = 0, l = 0, i = 0, ct; struct str *s; FILE *file; file = fopen("file.txt", "rb+"); if (!file) { printf("\nОшибка файла\n\n"); return 1; } puts("\nВведите количество строчек в файле (если не знайте содержимое файла, введите 100 или более)"); do { if (sh == 1) { fflushstdin(); } if (!scanf("%d", &a) || (a < 1) || (a > 1000)) { puts("Ошибка ввода. Введите заново"); } sh = 1; } while (!a || (a < 1) || (a > 1000)); sh = 0; a += P; puts("\nВведите max символьную длину имя, фамилии, отчества или группы (min 15)(если не знайте содержимое файла, введите 30 или более)"); do { if (sh == 1) { fflushstdin(); } if (!scanf("%d", &l) || (l < 15) || (l > 1000)) { puts("Ошибка ввода. Введите заново"); } sh = 1; } while (!l || (l < 15) || (l > 1000)); sh = 0; puts("\nВведите номер строки, которую хотите удалить"); do { if (sh == 1) { fflushstdin(); } if (!scanf("%d", &ct) || (ct < 1) || (ct > a)) { puts("Ошибка ввода. Введите заново"); } sh = 1; } while (!ct || (ct < 1) || (ct > a)); sh = 0; //Выделение памяти s = (struct str *)malloc(a * sizeof(struct str)); if (s == NULL) { printf("\nОшибка памяти\n"); return 1; } memory(a, l, s); for (i = 0; i < a; i++) { fscanf(file, "%s %s %s %s", s[i].name, s[i].sname, s[i].lname, s[i].gr); if (!*s[i].name) { break; } } fclose(file); f_removeall(); FILE *file1; file1 = fopen("file.txt", "rb+"); if (!file1) { printf("\nОшибка файла\n\n"); return 1; } for (i = 0; i < a; i++) { if (ct - 1 == i) { i++; } if (!*s[i].name) { break; } fprintf(file1, "%s %s %s %s\r\n", s[i].name, s[i].sname, s[i].lname, s[i].gr); } fclose(file1); //Очищение памяти fmemory(a, l, s); free(s); return 0; }
int f_find(int x) { int sh = 0, a = 0, l = 0, i = 0, u = 0; struct str *s; char *im; FILE *file; file = fopen("file.txt", "rb+"); if (!file) { printf("\nОшибка файла\n\n"); return 1; } puts("\nВведите количество строчек в файле (если не знайте содержимое файла, введите 100 или более)"); do { if (sh == 1) { fflushstdin(); } if (!scanf("%d", &a) || (a < 1) || (a > 1000)) { puts("Ошибка ввода. Введите заново"); } sh = 1; } while (!a || (a < 1) || (a > 1000)); sh = 0; a += P; puts("\nВведите max символьную длину имя, фамилии, отчества или группы (min 15)(если не знайте содержимое файла, введите 30 или более)"); do { if (sh == 1) { fflushstdin(); } if (!scanf("%d", &l) || (l < 15) || (l > 1000)) { puts("Ошибка ввода. Введите заново"); } sh = 1; } while (!l || (l < 15) || (l > 1000)); sh = 0; if (x == 0) { puts("\nВведите количество букв в имени, которое хотите найти"); } if (x == 1) { puts("\nВведите количество букв в фамилии, которую хотите найти"); } if (x == 2) { puts("\nВведите количество букв в отчестве, которое хотите найти"); } if (x == 3) { puts("\nВведите количество цифр в группе, которую хотите найти"); } do { if (sh == 1) { fflushstdin(); } if (!scanf("%d", &u) || (u < 1) || (u > 100)) { puts("Ошибка ввода. Введите заново"); } sh = 1; } while (!u || (u < 1) || (u > 100)); sh = 0; if (x != 3) { u *= 2; } im = (char *)malloc((u + 1) * sizeof(char)); fflushstdin(); puts("\nВведите информацию для поиска"); fgets(im, u + 1, stdin); //Выделение памяти s = (struct str *)malloc(a * sizeof(struct str)); if (s == NULL) { printf("\nОшибка памяти\n"); return 1; } memory(a, l, s); for (i = 0; i < a; i++) { fscanf(file, "%s %s %s %s", s[i].name, s[i].sname, s[i].lname, s[i].gr); if (!*s[i].name) { break; } if (strcmp(s[i].name, im) == 0 && x == 0) { printf("\n%s %s %s %s\n", s[i].name, s[i].sname, s[i].lname, s[i].gr); sh = 2; } if (strcmp(s[i].sname, im) == 0 && x == 1) { printf("\n%s %s %s %s\n", s[i].name, s[i].sname, s[i].lname, s[i].gr); sh = 2; } if (strcmp(s[i].lname, im) == 0 && x == 2) { printf("\n%s %s %s %s\n", s[i].name, s[i].sname, s[i].lname, s[i].gr); sh = 2; } if (strcmp(s[i].gr, im) == 0 && x == 3) { printf("\n%s %s %s %s\n", s[i].name, s[i].sname, s[i].lname, s[i].gr); sh = 2; } } if (sh != 2) { puts("\nДанных нет. Либо вы ввели не верное количество букв или цифр\n"); } fclose(file); //Очищение памяти fmemory(a, l, s); free(im); free(s); return 0; }
int f_sort(int x) { int sh = 0, a = 0, l = 0, i = 0, y = 0, j = 0; struct str *s; char *str; FILE *file; file = fopen("file.txt", "r"); if (!file) { printf("\nОшибка файла\n\n"); return 1; } puts("\nВведите количество строчек в файле (если не знайте содержимое файла, введите 100 или более)"); do { if (sh == 1) { fflushstdin(); } if (!scanf("%d", &a) || (a < 1) || (a > 1000)) { puts("Ошибка ввода. Введите заново"); } sh = 1; } while (!a || (a < 1) || (a > 1000)); sh = 0; a += P; if (x != -1) { puts("\nВведите max символьную длину имя, фамилии, отчества или группы (min 15)(если не знайте содержимое файла, введите 30 или более)"); do { if (sh == 1) { fflushstdin(); } if (!scanf("%d", &l) || (l < 15) || (l > 1000)) { puts("Ошибка ввода. Введите заново"); } sh = 1; } while (!l || (l < 15) || (l > 1000)); sh = 0; } else { l = P; } str = (char *)calloc((l + H), sizeof(char)); //Выделение памяти s = (struct str *)malloc(a * sizeof(struct str)); if (s == NULL) { printf("\nОшибка памяти\n"); return 1; } memory(a, l, s); for (i = 0; i < a; i++) { fscanf(file, "%s %s %s %s", s[i].name, s[i].sname, s[i].lname, s[i].gr); if (!*s[i].name) { y = i; break; } } if (x == 1) { for (i = 1; i < y; i++) { for (j = 0; j < y - i; j++) { if (strcmp(s[j].name, s[j + 1].name) > 0) { sort(s, j, str); } } } } if (x == 2) { for (i = 1; i < y; i++) { for (j = 0; j < y - i; j++) { if (strcmp(s[j].sname, s[j + 1].sname) > 0) { sort(s, j, str); } } } } if (x == 3) { for (i = 1; i < y; i++) { for (j = 0; j < y - i; j++) { if (strcmp(s[j].lname, s[j + 1].lname) > 0) { sort(s, j, str); } } } } if (x == 4) { for (i = 1; i < y; i++) { for (j = 0; j < y - i; j++) { if (strcmp(s[j].gr, s[j + 1].gr) > 0) { sort(s, j, str); } } } } fclose(file); f_removeall(); FILE *file1; file1 = fopen("file.txt", "rb+"); if (!file1) { printf("\nОшибка файла\n\n"); return 1; } for (i = 0; i < y; i++) { fprintf(file1, "%s %s %s %s\r\n", s[i].name, s[i].sname, s[i].lname, s[i].gr); } fclose(file1); //Очищение памяти fmemory(a, l, s); free(str); free(s); return 0; }