2015-03-06 2 views
-6
#include <stdio.h> 

int main() 
{ 
    int i; 

    for (i = 1; i <= 4; i++) { 

     switch (i % 3) { 

     case 0: printf("zero, "); 
     case 1: printf("one, "); 
     case 2: printf("two, "); 
     default: printf("what? "); 

     } 

     puts(" "); 

    } 

    return 0; 
} 

что делает switch(i%3) и puts(" ") означает? Я не понимаю, как они работают и что они означают.C язык, объясните этот код

объяснить также, почему выход:

один, два, и что?
2, какой?
нуль, один, два, что?
один, два, какой?

+0

На ваши вопросы будет дан ответ, прочитав любое базовое введение в C. – JeremyP

ответ

1

Причина конкретного производства. Так как вы не не имеют 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() добавит новую строку в конце.

+0

Очень подробный, я получаю его сейчас. Спасибо большое! –

+0

@Yu Vincent Welcome :) Вы можете отметить ответ правильно, если считаете, что это правильно или вам больше всего помочь –

1

i % 3 (чтение я по модулю три) является оставшимся от деления i по 3

Предполагая i равно 7, i % 3 возвращает 1, потому что 7 = 3 * 2 + 1

В общем puts пишет строку до стандартного выхода. Кроме того, к выводу добавляется символ новой строки. Поэтому puts(" ") выводит пробел и новую строку на стандартный вывод. Эта функция исходит из stdio библиотеки

Сигнатура puts является следующее:

int puts(const char *str)

+0

Вы можете привести пример и объяснить 'puts()'. –

+0

вы можете объяснить, почему вывод: один, два, что? два, что? нуль, один, два, что? один, два, что? –

+0

@YuVincent. У вас нет 'break;' операторов в каждом 'случае'. Поэтому, когда 'i% 3' равно 0, все случаи будут выполнены. Когда это 1, 'case 1' и все, что ниже этого, выполняется. Когда он равен 2, «case 2» и все, что ниже его, выполняется. –

Смежные вопросы