Skip to content

Instantly share code, notes, and snippets.

@kulikov
Forked from anonymous/gist:4372429
Last active December 10, 2015 03:08
Show Gist options
  • Select an option

  • Save kulikov/4372431 to your computer and use it in GitHub Desktop.

Select an option

Save kulikov/4372431 to your computer and use it in GitHub Desktop.
#include<stdio.h>
#include<stdlib.h>
/*
* Телефонная книга. После запуска программа позволяет просматривать и редактировать
* телефонную книгу. Книга должна хранить имя абонента и его номер. Редактирование должно
* включать в себя добавление и удаление абонентов. Просмотр включает в себя поиск по имени/номеру
* и просмотр списка целиком.
*/
// @kulikov очень плохие названия переменных, структур, функций
// f - отвратительно, Person или AddressBookItem - хорошо
// привильное именование - 50% успеха и удобочитаемости. Код пишут прежде всего чтобы его потом
// было просто и легко читать, чтобы через год ты понял что имел ввиду и куда тут коней запрягать
struct f
{
// @kulikov пробелы перед точкой с запятой не нужны и перед квадратной скобкой тоже
char name [100] ; // нужно так: char name[100];
int number ;
} tlf[100];
// @kulikov что делает эта функция?
// есть два способа объяснить это - или написать комментарий или задать ей правильное название
// например readPersonName()
// почему number == 1, что такое 1? number это номер телефона? почему он может быть равен 1?
// настоящее программирование это не просто написать программу которая работает, это любой дурак сможет
// самое сложное написать такую программу, которую будет удобно и быстро читать, понимать и расширять, т.е. дописывать функциональность
// я пока нихера не понимаю как оно тут работает, и чтобы понять нужно прочитать каждую строчку и тщательно проследить
// ход мыслей автора, т.е. тебя. вывод — плохая программа
void fname(void) {
int i;
for(i = 0; ; i++) { // @kulikov пробелы обязательно нужно ставить между for и открывающейся скобкой. те. так: for (i = 0; ; i++) {
if(tlf[i].number == 1) { // @kulikov тут тоже if (...)
scanf("%s", tlf[i].name);
break;
}
}
}
// @kulikov опять плохое название. что такое fnumber? что делает эта функция? нужно чтобы глядя только на название ты понимал
// предназначение
void fnumber(void) {
int r;
for(r = 0; ; r++) { // @kulikov пробел for ()
if(tlf[r].number == 1) { // @kulikov пробел if ()
scanf("%d", &tlf[r].number);
printf("\n");
break;
}
}
}
void del(void) {
int v;
scanf("%d", &v); // @kulikov пиши тут подробнее что нужно вводить printf("Enter number for delete: ")
tlf[v-1].number = 1;
tlf[v-1].name[0] = '\0';
}
// @kulikov учи английский
// printAllAddressBookItems()
// или showAllPersonList()
// и аргумент должен называться не t, а maxItemsToPrint
void fspisok(int t) {
int a = 0, y = 1, i;
for (i=0; i < t; i++) { // @kulikov а тут молодец, пробелы поставил верно
if (tlf[a].number != 1) {
printf("%d) name: %s;", y, tlf[a].name);
printf(" telephon: %d\n", tlf[a].number);
}
a++; // @kulikov a и y лишние переменные. достаточно только i. зачем тебе еще два счетчика?
y++;
}
}
/////////////////////////////////////////////////////////////////////////////////////////
int main() {
printf("1-name and telephon\n2-delite\n3-spisok\n4-exit\n\n");
int n, a = 0, t = 0;
// @kulikov вот только дойдя до сюда я понял что такое 1 и зачем оно. для пустых значений тогда уж принято использовать -1 или хотябы 0
while (a < 100) {
tlf[a].number = 1;
a++;
}
while(1) {
t++;
scanf("%d", &n);
printf("\n");
if(n == 1) {
fname();
fnumber();
}
if (n == 2) {
del();
}
if (n == 3) {
fspisok(t);
printf("\n");
}
if (n == 4) {
break;
}
}
}
/*
В целом ок, вроде программа должна работать.
Следует уделить внимание следующим вещам:
1. Именование переменных, функций, структур!
Никаких fname, del, t, tft, sdr, gko и прочей хери.
Пиши длинные названия, однозначно идентифицирующие что ты имел ввиду.
Люди, которые будут читать твою программу после тебя скажут тебе спасибо.
И прежде всего это будешь ты сам
2. Код стайл уже гораздо лучше, но еще есть куда расти.
Пробелы и отступы перед .;, почти всегда не нужны, зато всегда нужны перед ( и {
3. Пиши комментарии! Перед функциями или перед кусками кода, назначение которых не очевидно
Чем больше комментов тем лучше
Только комментарии должны быть осмысленными.
Т.е. если например функция называется printAddressBookList не нужно сверху писать коммент
// выводим список записей адресной книги. И так из названия понятно.
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment