[C] IDE

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
albatros
Iper Master
Iper Master
Messaggi: 2098
Iscritto il: sab 4 feb 2006, 13:59
Kernel: 6.18.0
Desktop: gnome and lxqt
Distribuzione: Ubuntu 24.04 & FC 41
Località: Darmstadt - Germania

Messaggio da albatros »

Beh, un sistema banale per l'esempio che hai fatto potrebbe essere scrivere un altro getchar(); ...

Avatar utente
DaD
Linux 2.x
Linux 2.x
Messaggi: 371
Iscritto il: mer 7 feb 2007, 18:19
Nome Cognome: Antonio Barra
Slackware: 13
Kernel: 3.0
Desktop: KDE 4
Distribuzione: Mac OS X
Contatta:

Messaggio da DaD »

Dani ha scritto:Ora run script l'ho impostato così:

Codice: Seleziona tutto

cd "%directory" && gcc  "%filename" -o `echo "%filename" | cut -f1 -d.` && konsole -e `pwd`/`echo "%filename" | cut -f1 -d.`
Poco elegante ma funzionale :D (almeno per quello che devo fare)
Non mi funziona in nessun modo :(
In pratica impostando la scorciatoia non mi compila proprio nulla, (Ho impostato F5 come scorciatoia ...).

Dani
Linux 4.x
Linux 4.x
Messaggi: 1447
Iscritto il: mer 26 apr 2006, 1:52
Desktop: gnome
Distribuzione: arch

Messaggio da Dani »

boh ha scritto:Per esempio questo:

Codice: Seleziona tutto

#include <stdio.h>

int main()
{
	int a,b;
	printf("Inserisci base e altezza del rettangolo \n");
	scanf("%d %d", &a, &b);
	printf("Il rettangolo ha area pari a %d \n\n", a*b);
	
	getchar();
}
Programma più elaborato rispetto a uno che stampa a video e basta, ma sono programmi abbastanza banali ;)
Il problema è che quando inserisci l'input scanf() legge i due interi e l'invio, il quale rimane nel buffer e fa apparentemente ignorare l'istruzione getchar()
Potresti risolvere seguendo il consiglio di albatros o anche facendoti una procedura di due righe da richiamare ogni qualvolta ce ne fosse bisogno

Codice: Seleziona tutto

void clrbuff (void){
int c;
while ( (c=getchar()) != '\n' && c != EOF ) 
 ;
}
O ancora usare scanf("%d %d %c",...);
@dad: cosa hai associato ad F5 ?

Avatar utente
boh
Linux 4.x
Linux 4.x
Messaggi: 1027
Iscritto il: ven 16 set 2005, 0:00
Slackware: 14.2 (x64)
Kernel: 4.4.111
Desktop: KDE 4.14.32
Località: Milano

Messaggio da boh »

Ok, sembra funzionare.
Grazie a tutti! ;)
"Be yourself. Everyone else is already taken." ~ Oscar Wilde

Avatar utente
DaD
Linux 2.x
Linux 2.x
Messaggi: 371
Iscritto il: mer 7 feb 2007, 18:19
Nome Cognome: Antonio Barra
Slackware: 13
Kernel: 3.0
Desktop: KDE 4
Distribuzione: Mac OS X
Contatta:

Messaggio da DaD »

Dani ha scritto:@dad: cosa hai associato ad F5 ?
Runscript, e lo configurato come hai suggerito tu;

Codice: Seleziona tutto

cd "%directory" && gcc  "%filename" -o `echo "%filename" | cut -f1 -d.` && konsole -e `pwd`/`echo "%filename" | cut -f1 -d.`
Ho anche aggiunto la funzione clrbuff creata da te, ma nulla :°(

Dani
Linux 4.x
Linux 4.x
Messaggi: 1447
Iscritto il: mer 26 apr 2006, 1:52
Desktop: gnome
Distribuzione: arch

Messaggio da Dani »

Sicuro che nel sorgente non ci siano errori di sintassi e che di conseguenza la compilazione vada a buon fine ? Il binario viene creato nella directory che contiene il file .c ?

Avatar utente
DaD
Linux 2.x
Linux 2.x
Messaggi: 371
Iscritto il: mer 7 feb 2007, 18:19
Nome Cognome: Antonio Barra
Slackware: 13
Kernel: 3.0
Desktop: KDE 4
Distribuzione: Mac OS X
Contatta:

Messaggio da DaD »

Dani ha scritto:Sicuro che nel sorgente non ci siano errori di sintassi e che di conseguenza la compilazione vada a buon fine ? Il binario viene creato nella directory che contiene il file .c ?
Hmm ...

Codice: Seleziona tutto

#include <stdio.h>

int main(){
    v = 1;
    v < 5 ? print("Min"); : print("Max");
    clrbuff();
}

void clrbuff(void){
    int c;
    while ( (c=getchar()) != '\n' && c != EOF );
}
Non sono un esperto di C ma non mi sembrano ci siano degli errori di sinstassi in questo script :roll:
Il file binario non viene proprio creato alla pressione di F5, cioè vedo per un nanosecondo l'icona del runscript comparire sul puntatore, però quando vado a vedere se è stato creato il binario, non c'è proprio nulla :\

Dani
Linux 4.x
Linux 4.x
Messaggi: 1447
Iscritto il: mer 26 apr 2006, 1:52
Desktop: gnome
Distribuzione: arch

Messaggio da Dani »

In effetti ci sono un po' di errori e gcc non compila:

- v non è stata dichiarata
- print() non esiste, almeno in stdio...
- il corpo di clrbuff() è dopo il main e prima manca il prototipo
- l'operatore ternario mi sembra applicato in maniea scorretta

Versione corretta:

Codice: Seleziona tutto

 #include <stdio.h>

void clrbuff(void);

int main(void){
    int v = 1;
    printf ("%s\n", (v < 5) ? "Min" : "Max");
    puts ("Premere invio...");
    getchar();
    return 0;
}

void clrbuff(void){
    int c;
    while ( (c=getchar()) != '\n' && c != EOF );
}
ps: clrbuff devi chiamarla solo quando ce n'è bisogno

Avatar utente
DaD
Linux 2.x
Linux 2.x
Messaggi: 371
Iscritto il: mer 7 feb 2007, 18:19
Nome Cognome: Antonio Barra
Slackware: 13
Kernel: 3.0
Desktop: KDE 4
Distribuzione: Mac OS X
Contatta:

Messaggio da DaD »

Dani ha scritto:In effetti ci sono un po' di errori e gcc non compila:

- v non è stata dichiarata
- print() non esiste, almeno in stdio...
- il corpo di clrbuff() è dopo il main e prima manca il prototipo
- l'operatore ternario mi sembra applicato in maniea scorretta
ps: clrbuff devi chiamarla solo quando ce n'è bisogno
1. Giusto, l'unica mia scusante (se può essere considerata così) e che vengo dalla programmazione in php :badgrin:
2. Vedi punto uno .
3. Ma io credevo che la dichiarazione del prototipo della funzione non fosse obbligatoria, cioè questo script ad esempio me lo compila senza problemi;

Codice: Seleziona tutto

#include <stdio.h>

int main(){
    int y = sum(2,4);
    printf ("Funzione sum: %d\n",y);

}

int sum(int a, int b) {
     return a + b;
}
Anche senza la dichiarazione del prototipo? Perchè?
4. Nell'operatore ternario c'era un ";" di troppo :lol: (Però era applicato corretamente, anche perchè in php lo si usa allo stesso modo).
5. Sarebbe? .

Dani
Linux 4.x
Linux 4.x
Messaggi: 1447
Iscritto il: mer 26 apr 2006, 1:52
Desktop: gnome
Distribuzione: arch

Messaggio da Dani »

DaD ha scritto: 3. Ma io credevo che la dichiarazione del prototipo della funzione non fosse obbligatoria, cioè questo script ad esempio me lo compila senza problemi;
Quando chiami una funzione il compilatore deve già conoscere cosa ritorna e quali parametri accetta, di conseguenza devi mettere il prototipo prima di richiamarla o in alternativa dichiarare la funzione prima del suo utilizzo...Il resto, anche se funziona con questo o quel compilatore non è corretto, che io sappia :roll:
5. Sarebbe? .
Quando il buffer di stdin non è vuoto

Rispondi