2012-02-02 15 views
6

Ho installato NetBeans 7.0.1 oggi Quando si tenta di eseguire il programma C con "scanf" in esso è dare errori straniprogrammi con lo scanf non funziona correttamente in NetBeans

Questo è ciò che ho scritto:

Program

Continua a essere in esecuzione finché non immetto qualcosa nella console di uscita. enter image description here

Dopo aver inserito i suoi spettacoli printf e mostra "RUN FALLITA"

enter image description here

Qualcuno può dirmi cosa devo fare per rendere questo diritto?

+2

un buon libro C sarebbe un buon punto di partenza ... – Nim

+0

Ho questo problema, il tuo problema risolto? –

risposta

3

tuo printf non viene scaricato, quindi non viene mostrato fino alla fine del programma.

Non si restituisce esplicitamente un valore da main(), pertanto viene restituito il risultato di scanf(), che è 1 che viene interpretato come errore del programma.

+1

Non così. Sebbene questo comportamento sia vero in alcune lingue, non è in C. Il codice di ritorno qui non è definito. In C99 c'è un'eccezione che ti permette di omettere 'return 0;' in main() e garantisce che restituisca ancora 0, ma non puoi fare affidamento su questo da nessun'altra parte. – FatalError

+0

@FatalError - Hai ragione che il valore restituito e il codice di uscita non sono definiti. C'erano (non so se ci sono ancora) implementazioni C in cui il valore indefinito finirà per essere l'ultimo risultato calcolato prima di raggiungere la fine della funzione. – antlersoft

+0

Ah, ok capisco cosa intendi allora. All'inizio pensavo che volevi dire che era una caratteristica :). Posso facilmente vedere come potrebbe accadere nella pratica. – FatalError

1

È necessario restituire 0 alla fine di main se non si presuppone che si sia verificato un errore.

+0

Grazie, ha funzionato, ma il mio problema principale è che printf non viene caricato fino a quando non digito qualcosa nella console. – Naresh

-1

Aggiungere un codice di ritorno. main() restituisce un int, quindi aggiungi return 0; nella parte inferiore della tua funzione main(). In questo momento, il valore che viene restituito è garbage, e in genere qualsiasi valore diverso da 0 indica un errore.

Inoltre, si potrebbe considerare la possibilità di:

int main(void) 

essere più espliciti (anche se non cambierà nulla qui).

0

Non sta tornando 0, che indica la risoluzione di successo per il sistema operativo e non si è messa un trailing \n sul printf, causando la linea per non stampare (stdin è tamponato):

#include <stdio.h> 

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

Un programma C senza un valore di ritorno comporta un comportamento non definito (che è considerato unanimemente una brutta cosa ©). Il compilatore ha il permesso di entrare liberamente in ciò che ritorna qui, sembra che stia restituendo il risultato di scanf() ma potrebbe restituire un po 'di entropia atmosferica per tutte le cure C standard.

Per quanto riguarda la linea che non stampa, è perché si sta usando printf() su un terminale bufferizzato, si vorrà aggiungere \ n alla fine. La ragione di ciò riconduce agli antichi metodi Unix che sono stati da tempo dimenticati da tutti tranne i sagaci guru di Unix.

Per quanto accade fino a quando non si inserisce qualcosa, è perché i blocchi scanf() fino a quando non viene ricevuto un input, nel caso in cui non si fosse già a conoscenza di ciò. È possibile utilizzare chiamate di IO non bloccanti, ma non sono sicuro se ciò rientra nella portata della domanda. (si prega di definire "fai questo").

8

Sì, ho lo stesso problema con te e le soluzioni nelle risposte non funzionano sulla mia macchina. Dopo la ricerca, capisco che questo problema riguarda la sezione terminale/console interna di Netbean. La console interna non è in grado di eseguire la funzione scanf. Quindi usa un terminale esterno per il tuo progetto.Per fare ciò:

  • prima fare clic con il pulsante destro del mouse sul progetto e selezionare Proprietà.
  • In questa finestra selezionare la scheda "Esegui" in basso.
  • lì, c'è "Console Type", cambiare questo tipo di console da "terminale interno" a "terminale esterno".

Questo è tutto.

+0

Questa soluzione ha funzionato per me. Grazie mille. – TheKraven

+0

È un problema per me, "impossibile trovare alcuna shell valida". –

Problemi correlati