- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
void mb_sim_pix(uchar* IN, uchar* OUT, int *WH, int *bSize, int *A, int *pSize, float *threshold){
int pos = mb_calc_pos(A, WH, pSize);
int nPos;
int i, n;
int B[2];
for(n = 0; n < 4; n++){
switch(n){
case 0:
B[0] = A[0] + 1;
B[1] = A[1];
case 1:
B[0] = A[0];
B[1] = A[1] - 1;
case 2:
B[0] = A[0];
B[1] = A[1] + 1;
case 3:
B[0] = A[0] - 1;
B[1] = A[1];
}
if( B[0] >= 0 && B[0] < WH[0] &&
B[1] >= 0 && B[1] < WH[1]){
nPos = mb_calc_pos(B, WH, pSize);
if(mb_val_pix(OUT, &nPos, pSize) == 0){
if(mb_sim_pack(IN, &pos, &nPos, pSize) >= *threshold){
for(i = 0; i < *pSize; i++) OUT[nPos + i] = IN[nPos + i];
mb_sim_pix(IN, OUT, WH, bSize, B, pSize, threshold);
}
}
}
}
}
Тоже самое через if работает, а через switch проваливается на значении 0 все итерации. Почему?
Stertor 27.07.2013 00:28 # −3
Модератор
Stertor 27.07.2013 00:29 # −3
Stertor 27.07.2013 00:29 # −3
Stertor 27.07.2013 00:31 # −3
Stertor 27.07.2013 00:34 # −3
Stertor 27.07.2013 00:34 # −3
Stertor 27.07.2013 00:35 # −3
Stertor 27.07.2013 00:37 # −3
Stertor 27.07.2013 00:38 # −3
Stertor 27.07.2013 00:38 # −3
Stertor 27.07.2013 00:39 # −3
Stertor 27.07.2013 00:40 # −3
Stertor 27.07.2013 00:40 # −3
Stertor 27.07.2013 00:40 # −3
Stertor 27.07.2013 00:42 # −3
Stertor 27.07.2013 00:42 # −3
Stertor 27.07.2013 00:43 # −3
Stertor 27.07.2013 00:43 # −3
Stertor 27.07.2013 00:45 # −3
Stertor 27.07.2013 00:49 # −3
Stertor 27.07.2013 00:49 # −3
Stertor 27.07.2013 00:49 # −3
Stertor 27.07.2013 00:50 # −3
anonimb84a2f6fd141 27.07.2013 00:52 # 0
Stertor 27.07.2013 00:56 # −1
Stertor 27.07.2013 00:58 # +2
inkanus-gray 27.07.2013 00:56 # +2
А во-вторых, как выглядит «тоже самое через if»?
Stertor 27.07.2013 00:57 # 0
B[0] = A[0] + 1;
B[1] = A[1];
}
else if(n == 1){
B[0] = A[0];
B[1] = A[1] - 1;
}
else if(n == 2){
B[0] = A[0];
B[1] = A[1] + 1;
}
else if(n == 3){
B[0] = A[0] - 1;
B[1] = A[1];
}
inkanus-gray 27.07.2013 01:02 # +4
Дело в том, что свич в Си (и в языках, основанных по мотивам его синтаксиса) — это не совсем оператор ветвления... Это всего лишь коллекция меток. Здравствуй, вечно живой goto!
Для того, чтобы свич работал, как в Паскале, в конце каждой ветки нужно ставить break, иначе будет «провал»: будут последовательно выполняться все строчки, расположенные ниже текущей метки.
И напоследок возьмите картинку: http://www.tema.ru/travel/izhevsk.2001/09.jpg
Stertor 27.07.2013 01:03 # 0
Stertor 27.07.2013 01:06 # 0
inkanus-gray 27.07.2013 01:19 # 0
Stertor 27.07.2013 01:00 # 0
guest 27.07.2013 00:57 # +2
Stertor 27.07.2013 01:01 # 0
inkanus-gray 27.07.2013 01:09 # +1
Stertor 27.07.2013 01:09 # 0
inkanus-gray 27.07.2013 01:14 # 0
А если ругается, нужно искать синтаксическую ошибку где-то рядом.
Stertor 27.07.2013 01:16 # 0
Stertor 27.07.2013 01:17 # 0
Stertor 27.07.2013 01:18 # 0
guest 27.07.2013 17:52 # +6
Stertor 27.07.2013 17:59 # +1
eth0 27.07.2013 21:05 # +2
bormand 27.07.2013 21:27 # +2
anonimb84a2f6fd141 27.07.2013 21:47 # −1
guest 27.07.2013 22:00 # +2
guest 27.07.2013 22:03 # −2
bormand 28.07.2013 06:37 # +2
Да тут не язык ассоциируется, а тот, кто выкладывает эти гк.
anonimb84a2f6fd141 28.07.2013 10:46 # 0
bormand 28.07.2013 11:42 # 0
anonimb84a2f6fd141 28.07.2013 11:48 # 0
bormand 28.07.2013 18:46 # +1
Внезапно, но потому, что его проходят в школах ;)
inkanus-gray 28.07.2013 19:18 # 0
Stertor 28.07.2013 19:55 # 0
inkanus-gray 28.07.2013 20:01 # 0
Поясните этот тезис.
Stertor 28.07.2013 20:08 # 0
Надо вырывать языки тем, кто говорит, что работать за компом под современной виндой - сложно.
inkanus-gray 28.07.2013 20:32 # +3
1. Что означает «они все было под 95 винду»?
2. Почему это мешало преподавать Бейсик и Паскаль?
Stertor 28.07.2013 21:13 # 0
3.14159265 28.07.2013 19:06 # 0
Stertor 28.07.2013 19:56 # 0
си и асм для тех, кто любить нырять по локоть в машинное масло.
Для меня лично вполне хватает и дельфей
Jaroslav285 25.08.2021 04:00 # 0