Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

138
Visualizações
Para comparar dos programas entre sí

Ayúdame a entender cómo funciona el programa.

Lo tomo del libro de Steven Pratt “Program language C” que encuentro en la página № 289 ejercicio №6.

Es un programa, su código aquí:

 #include <stdio.h> #include <stdlib.h> int main(void) { int i = 0; while (i<3) { switch (i++) { case 0 : printf ("fat "); case 1 : printf ("hat "); case 2 : printf ("cat "); default : printf ("Oh no "); } putchar('\n'); } return 0; }

Por favor corrígeme si no estoy en lo cierto. En este momento, me gustaría explicar cómo funciona. Primero trabajar la función “mientras” tres veces.

La variable "i" tiene el primer valor de tiempo 0. Luego, durante el trabajo de la función "mientras", la variable debe agregarse tres veces tres veces.

Como resultado del trabajo del programa, obtuve este resultado:

 fat hat cat oh no hat cat oh no cat oh no

Pero no puedo entender cómo obtuve tal resultado. Estoy acostumbrado a IDE CodeBlock y mi compilador funciona bien. Cambié el código del programa muchas veces para entender cómo funcionaba. Cambié el operatore "caso".

En este momento cambié el código del programa así que:

 #include <stdio.h> #include <stdlib.h> int main(void) { int i = 0; while (i<2) { switch (i++) { case 1 : printf ("fat "); case 2 : printf ("hat "); case 3 : printf ("cat "); default : printf ("Oh no "); } putchar('\n'); } return 0; }

Después de obtener tal resultado:

 oh no fat hat cat oh no

Pero no puedo entender por qué el programa funciona así. En mi opinión, el programa debe dar tal resultado:

 fat Oh no

Creo que el trabajo de resultado o programa debe ser solo así. ¿Por qué el programa funciona así?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Su código debería verse así:

 #include <stdio.h> #include <stdlib.h> int main(void) { int i = 0; while (i<2) { switch (i++) { case 1 : printf ("fat "); break; case 2 : printf ("hat "); break; case 3 : printf ("cat "); break; default : printf ("Oh no "); break; } putchar('\n'); } return 0; }
over 4 years ago · Santiago Trujillo Relatório

0

"¿Por qué el programa funciona así?"

En resumen, se debe a la forma en que funciona una variable posterior al incremento y a que la implementación del libro de la declaración de switch , aunque legal, no es típica, ya que no limita el flujo de ejecución a un caso por iteración.

Primero, la forma de la declaración de switch del libro no es típica. Esperaría que parte del texto en esa sección del libro eventualmente incluya el uso de la instrucción break colocada entre cada una de las líneas de case

En el ejemplo original del libro, cuando se llama al switch en el primer bucle, i == 0 , lo que da como resultado este flujo de ejecución:

 starts at `case 0:` then increments `i` to `1`, then outputs `fat`, falls through to `case 1:` outputs `hat`, falls through to `case 2:` outputs `cat`, falls through to `default` outputs `Oh no`

La segunda iteración del ciclo while , con i == 1 , nuevamente incrementado posteriormente , comienza en el segundo case

 starts at `case 1:` `i` is incremented to `2`, then outputs `hat`, falls through to `case 2:` outputs `cat`, falls through to `default` outputs `Oh no`

Con i == 2 la tercera iteración sigue:

 starts at `case 2:` i is incremented to `3` outputs `cat`, falls through to `default` outputs `Oh no`

En su código modificado, se elimina el case 0 . Debido a que i se inicializa a 0 , el flujo de ejecución salta inmediatamente al caso default . Y puedes seguir al resto.

Tenga en cuenta que en el texto de su libro probablemente aprenderá que la declaración de switch se usa comúnmente junto con la declaración de break , lo que garantiza que solo se ejecute un case por swtich :

 int main(void) { int i = 0; while (i<3) { switch (i++) { case 0 : printf ("fat "); break;// execution flow jumps directly to closing } case 1 : printf ("hat "); break;// execution flow jumps directly to closing } case 2 : printf ("cat "); break;// execution flow jumps directly to closing } default : printf ("Oh no "); } putchar('\n'); } getchar(); return 0; }
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda