- 1
- 2
for(p=first; p!=NULL; p=p->next)
free(p);
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+111
for(p=first; p!=NULL; p=p->next)
free(p);
Освобождаем память всех элементов списка.
+135
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 512
typedef struct word
{
char wordBody[MAXSIZE];
int count;
struct word* next;
} Word;
Word* alloc(char* incomeWord)
{
Word* ret;
ret = (Word*)malloc(sizeof(Word));
ret->count=1;
ret->next=NULL;
strcpy(ret->wordBody, incomeWord);
}
void insert(Word **n, char* incomeWord)
{
Word** p_p_n;
int h=0;
if(*n==NULL)
{
*n = alloc(incomeWord);
return;
}
for(p_p_n = n; *p_p_n!=NULL; p_p_n = &(*p_p_n)->next)
{
if((strcmp(incomeWord,&(*p_p_n)->wordBody))==0)
{
(*p_p_n)->count++;
return;
}
}
for(p_p_n = n; *p_p_n!=NULL; p_p_n = &(*p_p_n)->next)
{
Word* ins = alloc(incomeWord);
Word* temp = *p_p_n;
Word** tt;
int is=0;
tt=p_p_n;
ins->next=temp;
*p_p_n = ins;
break;
}
}
void print(Word* n)
{
while(n!=NULL) {
if(n->count > 1)
{
printf("%s %d\n", n->wordBody, n->count);
}
n=n->next;
}
}
int main(void)
{
char buf[MAXSIZE]={'\0'};
FILE *fr;
Word* sez=NULL;
fr=fopen("Text1.txt", "r");
while(!feof(fr))
{
fscanf(fr,"%s",buf);
insert(&sez,buf);
}
print(sez);
printf("\n%d\n", sizeof(sez));
fclose(fr);
return 0;
}
Считаем сколЬко раз каждое слово встречается в текстовом файле. Программа выполняется 6.5 минут с файлом размером 850 килобайт.
+132
Было:
typedef struct {
int range; /*enabled flag*/
union {
struct {
unsigned str_length;
};
struct {
long i_min;
long i_max;
};
struct {
double d_min;
double d_max;
};
/* ... */
};
} wlp_range_t;
#define WLP_NO_RANGE() { .range = FALSE }
#define WLP_STRING_LENGTH(length) { .range = TRUE, .str_length = length}
#define WLP_INT_RANGE(min, max) { .range = TRUE, .i_min = min, .i_max = max }
#define WLP_FLOAT_RANGE(min, max) { .range = TRUE, .d_min = min, .d_max = max }
Стало:
typedef struct {
int range; /*enabled flag*/
struct {
struct {
unsigned str_length;
};
struct {
long i_min;
long i_max;
};
struct {
double d_min;
double d_max;
};
/* ... */
};
} wlp_range_t;
#define WLP_NO_RANGE() { B_FALSE, { {0} } }
#define WLP_STRING_LENGTH(length) { B_TRUE, { {length} } }
#define WLP_INT_RANGE(min, max) { B_TRUE, { {0}, {min, max} } }
#define WLP_FLOAT_RANGE(min, max) { B_TRUE, { {0}, {0, 0}, {min, max} } }
#define WLP_SIZE_RANGE(min, max) { B_TRUE, { {0}, {0, 0}, {0.0, 0.0}, {min, max} } }
/* ... */
Такая вот бяка получилась при портировании проекта с GCC на Visual C. А все потому, что:
1. ISO C++03 8.5.1[dcl.init.aggr]/15:
| When a union is initialized with a brace-enclosed initializer,
| the braces shall only contain an initializer for the first member of the union.
2. Visual C не поддерживает designated initializers
+136
i = 0;
while ((p_c = strchr(&str[i], c)) != NULL) {
k = p_c - str;
for (j = 0; j < k - i; j++)
putchar(' ');
putchar('*');
i = k + 1;
}
putchar('\n');
очень простой способ подчеркнуть определённые символы в массиве знаков
+127
#include <stdio.h>
int Sravn (int a, int b)
{
if (a=b)
{return 1;}
else
{return 0;}
}
int main()
{
int A[5]={1, 4, 7, 4, 4}, rez1, rez2, rez3, rez4, rez5;
int i=0;
rez1=Sravn(A[i], A[i+1])+Sravn(A[i], A[i+2])+Sravn(A[i], A[i+3])+Sravn(A[i], A[i+4]);
rez2=Sravn(A[i+1], A[i])+Sravn(A[i+1], A[i+2])+Sravn(A[i+1], A[i+3])+Sravn(A[i+1], A[i+4]);
rez3=Sravn(A[i+2], A[i])+Sravn(A[i+2], A[i+1])+Sravn(A[i+2], A[i+3])+Sravn(A[i+2], A[i+4]);
rez4=Sravn(A[i+3], A[i])+Sravn(A[i+3], A[i+1])+Sravn(A[i+3], A[i+2])+Sravn(A[i+3], A[i+4]);
rez5=Sravn(A[i+4], A[i])+Sravn(A[i+4], A[i+1])+Sravn(A[i+4], A[i+3])+Sravn(A[i+4], A[i+2]);
if (rez1>rez2 && rez1>rez3 && rez1>rez4 && rez1>rez5)
{printf ("/d", A[i]);}
else if (rez2>rez1 && rez2>rez3 && rez2>rez4 && rez2>rez5)
{printf ("/d", A[i+1]);}
else if (rez3>rez2 && rez3>rez1 && rez3>rez4 && rez3>rez5)
{printf ("/d", A[i+2]);}
else if (rez4>rez2 && rez4>rez3 && rez4>rez1 && rez4>rez5)
{printf ("/d", A[i+3]);}
else if (rez5>rez2 && rez5>rez3 && rez5>rez1 && rez5>rez4)
{printf ("/d", A[i+4]);}
return 0;
}
Ищет в массиве наиболее часто повторяющийся элемент. Написано мною. Нифига не работает, но ошибок не выдает.
+140
for (size_t i=cnt-1; i<cnt; --i)
цикол наоборот для типа без знака
+133
if ((frequency < config->frequency_max) || (frequency > config->frequency_min)) {
printk(KERN_ERR "%s: Frequency beyond limits, frequency=%d\n", __func__, frequency);
return -EINVAL;
}
Коллега отыскал где-то в недрах dvb подсистемы, в драйвере mopll'ки TDA6651.
+141
#include <stdio.h>
#include <conio.h>
#include <windows.h>
int main()
{
nachalo: system("cls");
int a;
printf("Write first number...");
scanf("%i", &a);
int b;
printf("Write second number...");
scanf("%i", &b);
int res1;
res1=a+b;
int res2;
res2=a-b;
int res3;
res3=a*b;
float res4;
res4=(float)a/b;
int res5;
res5=a*a;
int res6;
res6=b*b;
printf("\nSumm of %i + %i = %i\n", a, b, res1);
printf("Difference of %i - %i = %i\n", a, b, res2);
printf("Production of %i * %i = %i\n", a, b, res3);
printf("Private of %i / %i = %.4f\n\n", a, b, res4);
printf("Square of %i is %i\n", a, res5);
printf("Square of %i is %i\n\n", b, res6);
int max;
max = (b>a) ? b:a;
printf("The greatest number of %i and %i is %d\n\n", a, b, max);
int choice;
printf("To run program again, press number 1, else numbers \nor symbols will close the program...\n> ");
scanf("%i", &choice);
if (choice == 1)
{
goto nachalo;
}
else (choice != 1);
{
return 0;
}
}
Калькулятор. Nuff said
+139
/* В комментариях то что хотел Автор от своей программы */
/* Радует однако, что она компилируется и во время */
/* работы не выдает ни каких ошибок */
/* Порядок операторов сохранен. */
/* Тот же код только вырезанно "лишнее". */
/* Эта ф-ия находится в другом cpp файле */
float f(float x, float y)
{
/* Тут что-то происходит с x и y */
return x, y;
}
void main(void)
{
float **m;
/* ... */
float f(float x, float y);
/* ... */
/* Задается N */
float N;
/* ... */
/* Выделяется память под массив m[N][2] */
m = (float **)malloc(sizeof(float*));
for(i = 0; i < N; i++)
{
m[i] = (float*)malloc(sizeof(float*) * 2);
}
/* ... */
for(i = 0; i < N; i++)
{
/* Массив заполняется числами */
/* В m[i][] должны быть записанны числа x, y измененый ф-ей f */
/* т. е. m[i][0] = xf */
/* m[i][1] = yf */
for(j = 0; j < 2; j++)
{
m[i][j] = f(x, y);
/* ... */
}
}
/* ... */
}
+128
"%s[@%s='%s']"
Аццкий смайлик! Сборка запроса XPath для поиска элементов в XML DOM по значениям, переданным из другой функции.
sprintf(str,"%s[@%s='%s']",elemPath,attrName,value);