2012-02-02 46 views
6

He instalado NetBeans 7.0.1 hoy Cuando trato de ejecutar el programa C con "scanf" en el que se produce errores extrañosprogramas con el scanf no funciona correctamente en NetBeans

Esto es lo que escribió:

Program

Sigue funcionando hasta que entre algo en la consola de salida. enter image description here

Después de introducir sus espectáculos la sentencia printf y muestra "Ejecutar FALLIDA"

enter image description here

¿Puede alguien decirme lo que debo hacer para que este derecho?

+2

un buen libro C sería un buen lugar para comenzar ... – Nim

+0

Tengo este problema, ¿resuelve tu problema? –

Respuesta

3

Su printf no se vacía, por lo que no se muestra hasta que finaliza el programa.

No devuelve explícitamente un valor de main(), por lo que se devuelve el resultado de scanf(), que es 1, que se interpreta como un error del programa.

+1

No es así. Si bien este comportamiento es cierto en algunos idiomas, no está en C. El código de retorno aquí no está definido. En C99 hay una excepción que le permite omitir 'return 0;' en main() y garantizar que aún devuelva 0, pero no puede confiar en eso en ningún otro lado. – FatalError

+0

@FatalError - Tiene razón en que el valor de retorno y el código de salida no están definidos. Hubo (no sé si todavía hay) implementaciones de C donde el valor indefinido terminaría siendo el último resultado calculado antes de llegar al final de la función. – antlersoft

+0

Ah, vale, ya entiendo lo que quieres decir. Al principio pensé que querías dar a entender que era una característica :). Puedo ver fácilmente cómo podría suceder en la práctica. – FatalError

1

Debe devolver 0 al final de la línea principal si no asume que hubo un error.

+0

Gracias que funcionó, pero mi principal problema es que printf no se carga hasta que escribo algo en la consola. – Naresh

-1

Agregue un código de retorno. main() devuelve un int, así que agregue return 0; en la parte inferior de su función main(). En este momento, el valor que se devuelve es basura, y normalmente cualquier valor que no sea 0 indica una falla.

Además, usted podría considerar lo que es:

int main(void) 

a ser más explícita (aunque no va a cambiar nada aquí).

0

No está devolviendo 0, lo que indica la terminación exitosa para el sistema operativo y no están poniendo un trailing \n en su printf, haciendo que la línea para no imprimir (entrada estándar es amortiguada):

#include <stdio.h> 

int main() 
{ 
    int n; 
    printf("Enter the number:\n"); 
    scanf("%d", &n); 
    return 0; 
} 
0

Un programa C sin un valor de retorno dará como resultado un comportamiento indefinido (que se considera unánimemente como una cosa mala ©). Al compilador se le permite rienda suelta en lo que devuelve aquí, parece devolver el resultado de scanf() pero podría estar devolviendo algo de entropía atmosférica para todos los cuidados de C Standard.

En cuanto a la línea que no se imprime, eso se debe a que está utilizando printf() en un terminal con búfer, querrá agregar \ n al final. La razón de esto se remonta a las antiguas formas de Unix que hace tiempo que han sido olvidadas por todos menos los sabios de los gurús de Unix.

Como no pasa nada hasta que ingresa algo, eso es porque scanf() bloquea hasta que se recibe la entrada, en caso de que no lo supiera. Es posible utilizar llamadas IO no bloqueantes, pero no estoy seguro de si eso está dentro del alcance de su pregunta. (Por favor, defina "hacer esto bien").

8

Sí, tengo el mismo problema con usted, y las soluciones en las respuestas no funcionan en mi máquina. Después de buscar, entiendo que este problema es sobre la sección de terminal/consola interna de Netbean. La consola interna no puede ejecutar la función scanf. Entonces usa terminal externo para tu proyecto.Para hacer esto:

  • primero haga clic en su proyecto y seleccione propiedades.
  • En esa ventana, seleccione la pestaña "Ejecutar" en la parte inferior.
  • allí, hay "Tipo de consola", cambie este tipo de consola de "terminal interno" a "terminal externo".

Eso es todo.

+0

Esta solución funcionó para mí. Un millón de gracias. – TheKraven

+0

Es un problema para mí, "no se puede encontrar ningún shell válido". –

Cuestiones relacionadas