2010-08-11 14 views
5

Duplicar posibles:
Help with C puzzle¿Qué pasa con este programa C

La intención del programa era imprimir un signo menos 20 veces, pero no funciona.

#include <stdio.h> 
    int main() 
    { 
     int i; 
     int n = 20; 
     for(i = 0; i < n; i--) 
      printf("-"); 
     return 0; 
    } 
+1

Cuál es la salida/error? – James

+1

da infinito signo menos ... – SurajRk

+4

¿Es esto un problema de tarea? –

Respuesta

24
#include <stdio.h> 
    int main() 
    { 
     int i; 
     int n = 20; 
     for(i = 0; i < n; i++) 
      printf("-"); 
     return 0; 
    } 

Tenías -- en lugar de ++

+5

Sí, ese bucle se ejecutará para siempre porque 'i' comienza en' 0' y se vuelve cada vez más pequeño. Nunca será mayor que * n *, por lo que nunca se alcanzará la condición de salida del bucle. – FrustratedWithFormsDesigner

+4

Seguramente será mayor que n cuando el entero se envuelve? El ciclo solo funcionará por un poco más de lo previsto. – signine

10

Reemplazar yo-- con i ++.

4
int main() { 
    int i; 
    int n = 20; 
    for(i = 0; i < n; i++) 
    printf("-"); 
    return 0; 
} 

Disminución en lugar de incremento.

2

Ha intentado cambiar el

i-- 

a

i++ 

Usted tiene el bucle para imprimir un "-" durante el tiempo que "i" es inferior a 20. Después de cada loop reduce el valor de i en 1, continuará imprimiendo durante mucho tiempo. Cambiar la parte final del bucle for a "i ++" significa que realizará una iteración en cada bucle y se detendrá una vez que finalice la vigésima iteración.

1

la yo-- tiene que ser i ++

también se puede hacer

int n = -20; 
    for(i = 0; i > n; i--) 

pero eso es mala codificación de la práctica

+4

¿Por qué sugerir una respuesta que es mala práctica de codificación? –

+2

porque en otras situaciones desea disminuir su contador. en este caso, decrementar el contador no tiene sentido. – Forge

+2

@Jamie Creativity;) Uno puede aprender incluso de algo que no debe hacerse de una manera particular. –

-1

donde se imprime sin guiones. Usted puede ir con una solución de Jaime Wong o hacer esto:

for (i = n; i >= 0; i--)

+0

Imprimirá TANTOS guiones. Además, esa es una manera terrible de hacerlo. Muy no es la norma, y ​​es inútilmente un poco oscuro. –

+4

Eso no se imprimirá sin guiones, como todos los demás explicaron. Además, deletreaste mal mi nombre. –

+0

Vaya, tienes razón. Perdón por eso, en ambos casos. –

2

Cambio yo-- a i ++. i-- disminuye el valor que al inicio es 0 y con reducciones subsecuentes nunca llegará a 20 (o +20).

26

¡Este es un rompecabezas clásico!

La forma en que lo vi fue

"Sólo se puede cambiar/insertar/borrar un carácter en el código para hacer el - de impresión 20 veces".

Algunas respuestas son (si les recuerdo mal)

1)

#include <stdio.h> 
    int main() 
    { 
     int i; 
     int n = 20; 
     for(i = 0; -i < n; i--) 
      printf("-"); 
     return 0; 
    } 

Aquí cambia el i < n a -i < n

2)

#include <stdio.h> 
    int main() 
    { 
     int i; 
     int n = 20; 
     for(i = 0; i < n; n--) 
      printf("-"); 
     return 0; 
    } 

Aquí se cambia el i-- a n--

3)

#include <stdio.h> 
    int main() 
    { 
     int i; 
     int n = 20; 
     for(i = 0; i + n; i--) 
      printf("-"); 
     return 0; 
    } 

Se cambia la i < n-i+n.

Para un desafío, intente cambiar/insertar/eliminar un carácter para que imprima el - veces. (¡No lea los comentarios de esta respuesta si quiere probarlo!)

+3

+1 por hacer esto un rompecabezas. Bien pensado respuesta. –

+1

El desafío fue divertido;) Me alegro de que no haya mirado los comentarios antes de tratar de responderlo. –

1

¿Qué intenta exactamente hacer con este problema? Aquí intentas disminuir el valor de una variable ... una variable cuyo valor nunca alcanzará la condición (i < 20) que has proporcionado ... por lo tanto, continuará imprimiendo '-' hasta que lo especifique jamie wong, es decir, i= -2^31. Se convertirá en + ve. Acabo de probar este programa.

#include <stdio.h> 
int main() 
{ 
    int i; 
    int n = 20; 
    for(i = 0; i < n; i--) 
     printf("-"); 
    return 0; 
} 

De acuerdo con la pregunta que hiciste, i debe incrementar, es decir, en lugar de i++i--.

@jamie Wong: Gracias man..learnt una nueva cosa sobre THT una envolvente ....