¿Por qué no lo hace! = ‘Q’ ¿matar mientras el ciclo cuando gets (t) obtiene la entrada ‘Q’ desde la línea de comando?

Algunas cuestiones:

Debe tener al menos 2 caracteres de largo para que pueda contener un carácter ‘\ 0’. Tal como están las cosas, está sobrescribiendo la memoria con este código.

Además, tenga en cuenta que no puede usar el operador! = Para verificar la igualdad de cadenas en C.

Si está intentando salir cuando su cadena contiene “Q” (y un ‘\ 0’), puede usar

if (! strcmp (t, “Q”)) {
/* dejar */

Tenga en cuenta que strcmp devuelve un valor distinto de cero si sus cadenas NO son iguales, por lo que! Strcmp () es verdadero si las dos cadenas son iguales.

o si solo está buscando una “Q” inicial como su carácter de terminación (y todavía quiere salir, incluso si alguien escribe “QQQQQ” o lo que sea), puede usar

if (t [0] == ‘Q’) {
/* dejar */

También tenga en cuenta que gets () no es una gran función para E / S, ya que no es seguro: no sabe cuánto dura su cadena y puede desbordarse fácilmente. fgets () es mejor.

El código tiene que ser T [0]! = ‘Q’ Tenga en cuenta las comillas simples. Las comillas dobles siempre devuelven la dirección de una cadena, no un valor char. Que lenguaje

Y será mejor declarar que es al menos un byte más largo para el byte cero final.

¡Necesitas usar strcmp para comparar cadenas en lugar de! =

la dirección principal de t se está sobreescribiendo y el ciclo sale solo cuando el valor de t NO es Q pero usted dijo que está ingresando Q, por lo que no hay salida de ciclo allí