1469
This commit is contained in:
parent
fda83ea3e3
commit
34380748b0
135
du6/program.c
Normal file
135
du6/program.c
Normal file
@ -0,0 +1,135 @@
|
||||
#include<stdio.h>
|
||||
#include<stdlib.h>
|
||||
#include<stdbool.h>
|
||||
#include<string.h>
|
||||
#include<errno.h>
|
||||
#include<inttypes.h>
|
||||
|
||||
intmax_t readMaxCount(char *buffer, int size);
|
||||
bool readSttudent(char *buffer, int size);
|
||||
int findIndex(char *array[], char *match, int count);
|
||||
void swap(char **s1, char **s2);
|
||||
void sort(char *array[], int size);
|
||||
|
||||
int main() {
|
||||
char buffer[512];
|
||||
char *sttudenti[1000];
|
||||
int count = 0;
|
||||
intmax_t maxCount = 0;
|
||||
|
||||
maxCount = readMaxCount(buffer, sizeof(buffer));
|
||||
|
||||
if (maxCount < 0) {
|
||||
puts("Nespravny vstup");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
while (readSttudent(buffer, sizeof(buffer)) == true) {
|
||||
char *sttudent;
|
||||
int bl = strlen(buffer);
|
||||
int l = (buffer[bl - 1] == '\n') ? (bl - 1) : bl;
|
||||
|
||||
if (l <= 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
sttudent = (char*) malloc(l + 1);
|
||||
memcpy(sttudent, buffer, l);
|
||||
sttudent[l] = '\0';
|
||||
|
||||
int index = findIndex(sttudenti, sttudent, count);
|
||||
|
||||
if (index > -1) {
|
||||
free(sttudent);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
sttudenti[count] = sttudent;
|
||||
count++;
|
||||
}
|
||||
|
||||
if (count == 0) {
|
||||
puts("Ziadne prihlasky");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
sort(sttudenti, count);
|
||||
puts("Prijati studenti:");
|
||||
|
||||
for (int i = 0; i < (maxCount > count ? count : maxCount); i++) {
|
||||
puts(sttudenti[i]);
|
||||
}
|
||||
|
||||
if (maxCount < count) {
|
||||
puts("Neprijati studenti:");
|
||||
|
||||
for (int i = maxCount; i < count; i++) {
|
||||
puts(sttudenti[i]);
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < count; i++) {
|
||||
free(sttudenti[i]);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
intmax_t readMaxCount(char *buffer, int size) {
|
||||
char *retValPtr = fgets(buffer, size, stdin);
|
||||
int l = strlen(buffer);
|
||||
|
||||
if (retValPtr == 0 || ferror(stdin) != 0 || l == 0 || (l == 1 && buffer[0] == '\n')) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
char *endPtr;
|
||||
intmax_t result = strtoimax(buffer, &endPtr, 10);
|
||||
|
||||
if (errno == ERANGE || endPtr != buffer + (l - 1)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
bool readSttudent(char *buffer, int size) {
|
||||
char *retValPtr = fgets(buffer, size, stdin);
|
||||
int l = strlen(buffer);
|
||||
|
||||
if (retValPtr == 0 || ferror(stdin) != 0 || l == 0 || (l == 1 && buffer[0] == '\n')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int findIndex(char *array[], char *match, int count) {
|
||||
for (int i = 0; i < count; i++) {
|
||||
if (strcmp(array[i], match) == 0) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
void swap(char **s1, char **s2) {
|
||||
char *tmp = *s1;
|
||||
|
||||
*s1 = *s2;
|
||||
*s2 = tmp;
|
||||
}
|
||||
|
||||
void sort(char *array[], int size) {
|
||||
for (int i = 0; i < size - 1; i++) {
|
||||
for (int j = 0; j < size - i - 1; j++) {
|
||||
if (strcmp(array[j], array[j + 1]) > 0) {
|
||||
swap(&array[j], &array[j + 1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user