Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > как переделать код под мою задачу?


Автор: username12 23.5.2016, 20:14
Задача:
Получить информацию о дисковом системе компьютера,модель,емкость геометрия, и т.д разделы и файловые системы.

Как переделать код под мою задачу?

Код

int OpenFileR(char *FileName, FILE **File) {
    if ((*File = fopen(FileName, "r")) == NULL) return(0);
    else return(1);
}
int OpenFileW(char *FileName, FILE **File) {
    if ((*File = fopen(FileName, "w+")) == NULL) return(0);
    else return(1);
}
int CloseFile(FILE **File) {
    if (fclose(*File)) return(0);
    else return(1);
}
void Logo(void)
{
    puts("");
    puts("                              ============================");
    puts("");
    puts("                                XX  XX  YY  YY  NN    NN  ");
    puts("                                 XXXX    YYYY   NNNN  NN  ");
    puts("                                  XX      YY    NN NN NN  ");
    puts("                                 XXXX     YY    NN  NNNN  ");
    puts("                                XX  XX    YY    NN    NN  ");
    puts("");
    puts("");
    puts("                               ");
    puts("");
    puts("                              ============================");
    puts("");
    puts("=============================================================================================");
    puts("    Получить список пользователей, относящихся к группе с наибольшим числом пользователей    ");
    puts("=============================================================================================");
    puts("");
}
 
int GetGroups(char *String, FILE *Out) {
    int Count;
    for (Count = 0; Count < strlen(String)-1; Count++) {
        fputc(String[Count], Out);
        if (String[Count] == ':') 
            if (String[Count+1] == '\n') return(0);
    }
    fprintf(Out, ",");
    return(0);
}
 
int GetGID(char *String) {
    char Num[1000]; 
    int Count;
    for (Count = 0; Count < strlen(String)-1; Count++) {
        if (String[Count] == ':') {
            memcpy(Num, String, Count);
            Num[Count] = '\0';
            return(atoi(Num));
        }
    }
    return(-1);
}
 
void GetUsers(char *String, int IDG, FILE *Out) {
    int Count, IDU, Trig = 0;
    IDU = GetGID(String);
    if (IDU == IDG) {
        for (Count = 0; Count < strlen(String)-1; Count++) {
            if (Trig == 1) {
                fprintf(Out, "%c", String[Count]);
            }
            if (String[Count] == ':') Trig++;
        }
        fprintf(Out, ",");
    }
}
 
int CountUsers(char *String) {
    int Count, Num = 0;
    for (Count = 0; Count < strlen(String)-1; Count++) {
        if (String[Count] == ',') Num++;
    }
    return(Num);
}
 
void PrintUsers(char *String, int Max) {
    int Count, Num = 0, Trig = 0;
    for (Count = 0; Count < strlen(String)-1; Count++) {
        if (String[Count] == ',') Num++;
    }
    if (Num == Max) {
        fprintf(stdout, "Группа: ");
        for (Count = 0; Count < strlen(String)-2; Count++) {
            if (String[Count] == ':') {
                Trig++;
                continue;
            }
            if (Trig == 1) fprintf(stdout, "%c", String[Count]);
            if (Trig == 2) {
                fprintf(stdout, "       Пользователи: ");
                Trig++;
            }
            if (Trig == 3) fprintf(stdout, "%c", String[Count]);
        }
        fprintf(stdout, "\n");
    }
}


Код

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "Main9Func.h"
 
#define true 1
 
int main(void) {
    char StrGrp[1000], StrUsr[1000], StrOut[1000];
    int IDG = 0, Max = 0, Num = 0;
    FILE *Usr, *Grp, *Out;
////////////////////////////////////////////////////////////////////////////////////
    Logo();
    system("cat /etc/passwd | awk -F ":" \'{print $4":"$1}\' > users");
    system("cat /etc/group | awk -F ":" \' { print $3":"$1":"$4}\' > groups");
    OpenFileR("users", &Usr);
    OpenFileR("groups", &Grp);
    OpenFileW("out", &Out);
    while (true) {
        fgets(StrGrp, 800, Grp);
        if (feof(Grp)) break;
        GetGroups(StrGrp, Out);
        IDG = GetGID(StrGrp);
        while (true) {
            fgets(StrUsr, 800, Usr);
            if (feof(Usr)) break;
            GetUsers(StrUsr, IDG, Out);
        }
        fprintf(Out, "\n");
        rewind(Usr);
    } 
    rewind(Out);
    while (true) {
        fgets(StrOut, 800, Out);
        if (feof(Out)) break;
        Num = CountUsers(StrOut);
        if (Num > Max) Max = Num;
    }
    rewind(Out);
    while (true) {
        fgets(StrOut, 800, Out);
        if (feof(Out)) break;
        PrintUsers(StrOut, Max);
    }
    fprintf(stdout, "\n\n");
    CloseFile(&Usr);
    CloseFile(&Grp);
    CloseFile(&Out);
    return(0);
}

Автор: xvr 24.5.2016, 14:17
Цитата(username12 @  23.5.2016,  20:14 Найти цитируемый пост)
Как переделать код под мою задачу?

Никак. Исходный код никак не работает с 'информацию о дисковом системе компьютера,модель,емкость геометрия, и т.д разделы и файловые системы.'

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)