Няшная / Говнокод #3421 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
#include <iostream>
#include <string.h>
using namespace std;
int strsearch(char* from, char* what);
int getnumberafter(char* from, char* what);
int strch(char* a, char* b, int pos);

int strsearch(char* from, char* what)
{
    int n=strlen(from)-strlen(what)+1;
    int i;
    for(i=0; i<n; i++)
	if(strch(from, what, i)==strlen(what)) return i;
    return 0;
}
int getnumberafter(char* from, char* what)
{
    int p, ret=0;
    if((p=strsearch(from,what))==0) return 0;
    p+=strlen(what);
    while(from[p]<'0'&&from[p]>'9')
    {
	p++;
	if(p>=strlen(from)) return 0;
    }
    while(from[p]>='0'&&from[p]<='9'&&p<strlen(from))
    {
	ret=ret*10+(from[p++]-'0');
    }
    return ret;
}
int strch(char* a, char* b, int pos)
{
    int i,n=min(strlen(a)-pos,strlen(b));
    for(i=0; i<n; i++)
	if(a[i+pos]!=b[i]) return i;
    return i;
}
int main(int argc, char* argv[])
{
    int i;
    double max=1,vol=0;
    for(i=0; i<argc; i++)
    {
	cout << i << ": " << argv[i] << endl;
	if(strch(argv[i],"type",0)==4) {  max=getnumberafter(argv[i],"max=");}
	if(strch(argv[i],"values",0)==6) { vol=(getnumberafter(argv[i],"=")+getnumberafter(argv[i],","))/2;}
    }
    cout << vol/max << endl;
    return 0;
}

Задача из чего-то типа этого:
numid=2,iface=MIXER,name='Master Playback Volume'
; type=INTEGER,access=rw---R--,values=2,min=0,max=31,step=0
: values=31,31
| dBscale-min=-46.50dB,step=1.50dB,mute=0
Получить значение в процентах.
#./a.out `amixer cget numid=2`
0,67

Запостил: Tanger Tanger, (Updated )

Комментарии (14) RSS

  • Код совпадает с регэкспом (while|for).+strlen, следовательно говнокод
    Ответить
    • Извините, я что-то не уловил логику где-то между "совпадает с регэкспом" и "говнокод". Да и, честно говоря, и не понял как данный regexp относится к данному коду, но это хрен с ним. Мне интереснее, как из этого следует, что код - говнокод.
      Ответить
      • А что, по-вашему, вычислять strlen в цикле - это хорошая идея?
        Ответить
        • А, я кажется наконец-то понял, что вы хотели сказать фразой "совпадает с регэкспом". Мне изначально показалось, что вы каким-то образом сочли, что программа выполяет ту же функцию что и некий regexp, а не то, что код программы удовлетворяет регулярному выражению. Извиняюсь.
          Ответить
          • Просто "совпадает" - это же общепринятый перевод термина match. Я даже не знаю как выразиться более однозначно.
            Ответить
              • "Соответствует" - неплохой вариант. Но в книжке с совой было, емнип, "совпадает".
                Ответить
                • Что доказывает, что говнописатели есть не только среди программистов, но и среди переводчиков.
                  Еще вариант, кое-где использовавшийся, «отвечает».
                  Ответить
    • Кстати о регэкспах, типичный случай того, где C не нужен, поскольку дело происходит на юниксе:)
      Ответить
  • Зачем столько однообразного говна постить? Достаточно выбрать самое говнистое. Эдак скоро архивы с исходниками заливать начнем.
    Ответить

Добавить комментарий

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8