|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Sep 2003
Città: Regno Unito
Messaggi: 5714
|
Sono all' inizio, help poco tecnico...
Grazie a tutti, ora partiamo con le domandine...
Con Dev C++ creo un nuovo file sorgente in c, scrivo il programma e lo compilo. Quando vado a cliccare sull' exe si apre un promt di dos che si richiude in un nanosecondo, cosa non funziona? ![]() Il programma è il classico welcome to c per intenderci ![]() Come si fanno a scrivere le parentesi graffe ? ![]() ![]()
__________________
3090 FE & Ryzen 5700x - Legion 7 5800h 32gb - 3080 16gb |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jul 2004
Messaggi: 1578
|
Il motivo per cui il programma ti si chiude velocemente è dovuto al fatto che ogni istruzione che tu hai scritto nel tuo sorgente viene eseguita, e quando ogni istruzione nella funzione main è stata eseguita (e quindi esce dalla funzione main) il programma finisce.
In windows le finestre di dos vengono aperte solo quando un programma dos viene avviato e si chiudono non appena il programma termina, cioè appena ha finito di eseguire tutte le istruzioni contenute nell'eseguibile. Allora tu se vuoi leggere quello che è stato scritto nella finestra hai bisogno di tenere aperto il programma, cioè non farlo finire finchè non vuoi tu (utente). La cosa più semplice che puoi fare è usare la funzione system dando come argomento la stringa "pause"; system è una funzione che esegue molte delle operazioni di dos (tra cui appunto mettere in pausa l'esecuzione fino a quando non viene premuto un tasto). Devi anche includere l'header stdlib.h, in cui si trova la dichiarazione di quella funzione; quindi ricapitolando: #include <stdlib.h> ...il tuo programma uguale a come era prima fino alla fine di main dove aggiungi: system( "pause" ); Per fare le graffe devi usare ALT+123 e ALT+125. |
![]() |
![]() |
![]() |
#3 |
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Sotto Windows puoi fare le parentesi graffe premendo AltGr + Shift + la parentesi quadra corrispondente.
Per sospendere l'esecuzione di un programma, oltre a: Codice:
system("pause"); Codice:
getch(); Un metodo che funziona sempre e usa solo le funzioni C standard è: Codice:
while (getchar() != '\n') ; ![]()
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" ![]() Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Sep 2003
Città: Regno Unito
Messaggi: 5714
|
scusa. Credevo che la ricerca fosse ancora disabilitata.
![]() ![]() Ora vado a fare un pò di prove e cerco i tuoi post. Avevo già provato alt+123 ma non funziona, l'avevo trovata con san google. ![]()
__________________
3090 FE & Ryzen 5700x - Legion 7 5800h 32gb - 3080 16gb |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Sep 2003
Città: Regno Unito
Messaggi: 5714
|
Ho fatto come diceva ziosilvio per mantenere il programma conforme allo standard. Negli altri post che ho trovato non c'era spiegato il perchè funziona, me lo spieghi ora, grazie
![]()
__________________
3090 FE & Ryzen 5700x - Legion 7 5800h 32gb - 3080 16gb |
![]() |
![]() |
![]() |
#6 | |
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Quote:
Ora, getchar prende un carattere alla volta dallo standard input: se imponi il confronto con il newline, la bufferizzazione ti garantisce che il programma non farà niente finché tu non inserirai una sequenza di caratteri e premerai Invio. Finché getchar legge caratteri diversi dal newline, la condizione del while farà eseguire un ciclo in cui non si fa niente (quel punto e virgola da solo subito dopo il while è l'istruzione vuota); una volta letto il newline, il while si interromperà e l'istruzione successiva (ad esempio, "return 0;") verrà eseguita.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" ![]() Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Sep 2003
Città: Regno Unito
Messaggi: 5714
|
Grazie ancora, in un altro programma ho usato lo stesso ragionamento usando
if (getchar() == '\n'); per mantenerlo aperto fino a quando non viene premuto invio, ma volevo fare in modo che esca una schermata di questo tipo Do you want to quit? y/n e con y chiudesse il programma mentre con n no
__________________
3090 FE & Ryzen 5700x - Legion 7 5800h 32gb - 3080 16gb Ultima modifica di Vash88 : 08-01-2005 alle 14:59. |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9302
|
prova un po' a ragionare per vedere come si fa...
![]() |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Sep 2003
Città: Regno Unito
Messaggi: 5714
|
Quote:
![]() Una altra cosa, esiste un sito dove posso trovare tutte le varie combinazioni di tasti per i caratteri speciali?
__________________
3090 FE & Ryzen 5700x - Legion 7 5800h 32gb - 3080 16gb |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:50.