Причина конкретного производства. Так как вы не не имеют break;
для условий переключателя вы провалитесь всех случаях переключаться с первого матча найдено
Из this учебника,
Когда переменная переключаясь на равно случае заявления после этого случая будет выполняться до тех пор, пока не будет достигнут оператор break.
Если перерыв не появляется, поток контроля будет просачиваться в последующие случаи до достижения разрыва.
switch (i % 3) {
case 0: printf("zero, "); // <= No break so once this get match all the below will get execute. (Till a break is reached)
case 1: printf("one, ");
case 2: printf("two, ");
default: printf("what? ");
}
Так что в вашем случае для i=0
в i=4
, происходит следующее,
Когда i=1
вы получите i%3
будет совпадать с case 1
и выход будет one,two,what?
.
Когда i=2
вы получите i%3
будет совпадать с case 2
и выходом будет two,what?
Когда i=3
вы получите i%3
будет совпадать с case 0
и выходом будет zero,one,two,what?
Когда i=4
вы получите i%3
будет совпадать с case 1
и выход будет one,two,what?
И примечание что default
- это случай, выполняемый, когда дело не соблюдается.но в вашем случае, так как у вас нет break
, это тоже будет выполнено и результаты для what?
.
И что такое puts()
, это просто строка для стандартного вывода. В вашем случае puts ("") помещает пробел. И обратите внимание, что puts()
добавит новую строку в конце.
На ваши вопросы будет дан ответ, прочитав любое базовое введение в C. – JeremyP