View Full Version : [C][sono niubbo!] traduttore in C
Ciao! ho un problema con un programma da sviluppare per scuola... devo creare un traduttore italiano-inglese e viceversa simile al Dos (si dice prompt?) solo che ho un problemino... non so come confrontare la parola scritta dall'utente con il vettore contenente le parole traducibili! praticamente la parola dovrebbe venireconfrontata con tutte le parole contenute nel vettore e, una volta trovata qualla uguale, un contatore mi dovrebbe dare la posizione di essa che corrisponde alla traduzione nell'altro vettore!
Sono stato spiegato? :oink: :oink: :oink: :oink:
Grazie in anticipo a chi mi darà una mano! :D
:help: :help: :help:
#include<stdio.h>
main(){
int i,j,z,it,en;
char lang[50], ita[]="ita", eng[]="eng", parita[100];
char ital[10][1000]={"ciao\0","bello\0","brutto\0"};
char engl[10][1000]={"hello\0","biutiful\0","orribol\0"};
do{
printf("Trad>");
scanf("%s", &lang);
z=mystrcmp(lang, ita);
if(z==0)
it=1;
else{
z=mystrcmp(lang, eng);
if(z==0)
en=1;
}
}
while(z!=0);
//fin qui sembra andare... poi userò strcmp di string.h
if(it==1){
printf("Trad>ita-eng>");
scanf("%s", &parita); //"parita" è la variabile contenente la parola da tradurre
//for(i=0;i<3;i++){ come si fa?
z=mystrcmp(parita, *ital);
if(z==0)
printf("%s", eng[i]);
//}
}
else
if(en==1)
printf("Trad>eng-ita>"); //qua poi ci andra lo stesso codice di ita ma con eng
}
int mystrcmp(char *str1, char *str2){
int i;
for(i=0;(str1[i]!='\0')&&(str2[i]!='\0');i++)
if(str1[i]>str2[i])
return 1;
else
if(str1[i]<str2[i])
return -1;
return 0;
}
Ciao! ho un problema con un programma da sviluppare per scuola... devo creare un traduttore italiano-inglese e viceversa simile al Dos (si dice prompt?) solo che ho un problemino... non so come confrontare la parola scritta dall'utente con il vettore contenente le parole traducibili! praticamente la parola dovrebbe venireconfrontata con tutte le parole contenute nel vettore e, una volta trovata qualla uguale, un contatore mi dovrebbe dare la posizione di essa che corrisponde alla traduzione nell'altro vettore!
Sono stato spiegato? :oink: :oink: :oink: :oink:
Grazie in anticipo a chi mi darà una mano! :D
:help: :help: :help:
//today 2/5/05 de progam dosent wont tu work wel
//scritto su KWrite 4.2.1 rullante in itix (www.itix.it)
#include<stdio.h>
main(){
int i,j,k,z,it,en; //non so se le uso tutte ste variabili
char lang[50], ita[]="ita", eng[]="eng", parita[100];
char ital[10][1000]={"ciao\0","bello\0","brutto\0"};
char engl[10][1000]={"hello\0","biutiful\0","orribol\0"};
do{
printf("Trad>");
scanf("%s", &lang);
z=mystrcmp(lang, ita);
printf("%d", z);
if(z==0)
it=1;
else{
z=mystrcmp(lang, eng);
printf("%d", z);
if(z==0) en=1;}
}
while(z!=0);
//fin qui sembra andare... anche se se scrivo ita + altre lettere lo legge lo stesso come ita (italoo ad es viene accettato come ita) lo stesso vale per eng... se il prof si accorge (molto probabile) lo metterò apposto...
if(it==1){
printf("Trad>ita-eng>");
scanf("%s", &parita); //"parita" è la variabile contenente la parola da tradurre
//for(i=0;i<3;i++){ waaaaaaaaaaaaaaaaaaaaaaaaaa!!! ma come si faaaaaaaaaa!!!!!!!!!!!
z=mystrcmp(parita, *ital);
printf("%d", z);
if(z==0)
printf("%s", eng[i]);
//}
}
else
if(en==1)
printf("Trad>eng-ita>"); //qua poi ci andra la sessa roba di ita ma con eng
}
int mystrcmp(char *str1, char *str2){
int i;
for(i=0;(str1[i]!='\0')&&(str2[i]!='\0');i++)
if(str1[i]>str2[i])
return 1;
else
if(str1[i]<str2[i])
return -1;
return 0;
}
Io una mano te la vorrei pure dare ma visto che hai usato il tag code, potresti almeno metterci un'indentazione decente? Non mi va di stare a sistemare un codice praticamente illeggibile. Togli quello che non serve. E' inutile che dichiari 50 variabili se poi non le usi. Dichiarale man mano che le usi.
Fenomeno85
04-05-2005, 18:17
Io una mano te la vorrei pure dare ma visto che hai usato il tag code, potresti almeno metterci un'indentazione decente? Non mi va di stare a sistemare un codice praticamente illeggibile. Togli quello che non serve. E' inutile che dichiari 50 variabili se poi non le usi. Dichiarale man mano che le usi.
la dichiarazione lasciala in testa se no è un macello :O
per confrontare due stringhe avete già usato la libreria string.h o dovi farlo "mano"? per l'identazione sono d'accordo
~§~ Sempre E Solo Lei ~§~
Non e' per qualcosa, ma ogni volta di mettersi a lavorare con un pezzo di codice bisogna mettersi a fare i tipografi per sistemare il codice da renderlo lavorabile... Un po di comprensione pure per chi risponde...
Fenomeno85
04-05-2005, 18:31
Non e' per qualcosa, ma ogni volta di mettersi a lavorare con un pezzo di codice bisogna mettersi a fare i tipografi per sistemare il codice da renderlo lavorabile... Un po di comprensione pure per chi risponde...
su questo sono d'accordo :D
~§~ Sempre E Solo Lei ~§~
scusate... :cry: ora va bene? qui non mi fa usare il tab...
@ Fenomeno si posso usare string.h e mi sa tanto che è meglio usarla... anzi... per forza!
scusate ancora e grazie mille! :doh: :doh: :ave: :ave:
Fenomeno85
05-05-2005, 14:43
scusate... :cry: ora va bene? qui non mi fa usare il tab...
@ Fenomeno si posso usare string.h e mi sa tanto che è meglio usarla... anzi... per forza!
scusate ancora e grazie mille! :doh: :doh: :ave: :ave:
per forza no, usare un metodo già scritto da altri ti permette solo di risparmiare tempo :O
ps: ma come scrivi bello in inglese??? :asd:
~§~ Sempre E Solo Lei ~§~
per forza no, usare un metodo già scritto da altri ti permette solo di risparmiare tempo :O
beh volevo usare la mia ma se una parola è piu lunga dell'altra non va! LOL pace la lascio così tanto l'esercizio sulle stringhe l'ho già consegnato! :p
ps: ma come scrivi bello in inglese??? :asd:
sai... erano l'ottava e nona ora di scuola quando ho scritto questo mezzo programma e non ero molto lucido! :ronf: :ronf: :ronf:
Ciau! ;D
Fenomeno85
05-05-2005, 14:50
ah deciditi ti hanno detto di usare la funzioni presenti in string.h o vuoi farla te la procedura?? perchè in quello che vedo la fai tu.
Poi le procedure vanno messe sopra la funzione main oppure sotto (io detesto questo stile) dichiarando i prototipi sotto l'inclusione delle librerie ;)
~§~ Sempre E Solo Lei ~§~
ah deciditi ti hanno detto di usare la funzioni presenti in string.h o vuoi farla te la procedura?? perchè in quello che vedo la fai tu.
Poi le procedure vanno messe sopra la funzione main oppure sotto (io detesto questo stile) dichiarando i prototipi sotto l'inclusione delle librerie ;)
va bene in string.h ho usato la mia solo perchè il prof mi ha detto che metterla sarebbe stato meglio ma si arrangia! :pppPp
stile? quale stile? io di stile non ne ho! ghghgh! perdono non sono un esperto... grazie dei consigli almeo miglioro! :D
Sto lavorando al tuo problema. Dammi un po di tempo perche' devo andare a fare pure la spesa. Prima di perdere tempo, mi dici al volo se hai fatto i puntatori? No perche' dichiarare delle stringhe come:
char eng[]="eng";
char ita[]="ita";
mi sembra un tantino banale.
Ti includo anche dei commenti (di stile e di funzionamento).
Lo stile e' personale, ma bisogna acquisirne uno. Il funzionamento un po meno, ma puo' dipendere dallo stile. Rispondimi al volo prima che mi chiudono i supermercati :D
va bene in string.h ho usato la mia solo perchè il prof mi ha detto che metterla sarebbe stato meglio ma si arrangia! :pppPp
stile? quale stile? io di stile non ne ho! ghghgh! perdono non sono un esperto... grazie dei consigli almeo miglioro! :D
Pardon, ma a giudicare dal resto del codice, forse quella e' l'unica funzione scritta bene e non sembra l'abbia scritta proprio tu :D
La si deve usare o no? Perche' io dopo che ti ho presentato il programma non voglio sentire niente :sofico:
Fenomeno85
05-05-2005, 15:25
/*
Programma realizzato da Fenomeno85.
Questo programma permette di effettuare delle traduzioni dall'italiano all'inglese e
viceversa.
*/
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <windows.h>
#define NWORD 10
#define LENGTH 1000
/* this function permits to translate the word */
int translate (char lang[], int type){
char ital[NWORD][LENGTH]={"ciao","bello","brutto"};
char engl[NWORD][LENGTH]={"hello","beautiful","orribol"};
int i;
for (i=0;i<NWORD;i++){
if (type == 1){
if (strcmp (lang, engl[i])==0){
printf ("Trad>ita:%s",ital[i]);
return (1);
}
}
else{
if (strcmp (lang, ital[i])==0){
printf ("Trad>:%s",engl[i]);
return (1);
}
}
}
return (-1);
}
/* function main */
int main (void){
char scelta;
int ris;
char lang [LENGTH];
printf ("\nInsersci stringa:\t");
fflush (stdin);
gets (lang);
do{
printf ("\nPremi 1 per tradurre in ITA, 2 pe ENG\n");
printf ("\nScelta:\t");
fflush (stdin);
scelta = getchar ();
}while (scelta != '1' && scelta !='2');
if (scelta == '1')
ris = translate (lang,1);
else
ris = translate (lang,2);
if (ris == -1) {
printf ("\nThe word doesn't exist in the database.\n");
}
printf ("\n\n\n");
system ("PAUSE");
return (0);
}
la pulizia del codice è la cosa + importante
~§~ Sempre E Solo Lei ~§~
:eek: :eek:
Fenomeno... sei un fenomeno! :D è un tantino impestata... ma è mitico! ora me lo studio! :DDD windows.h e conio.h devo cercarmeli... mai visti! :( grazie 1000! ti devo un favore! :D
Pardon, ma a giudicare dal resto del codice, forse quella e' l'unica funzione scritta bene e non sembra l'abbia scritta proprio tu :D
La si deve usare o no? Perche' io dopo che ti ho presentato il programma non voglio sentire niente :sofico:
nono toglila pure! si l'ho fatta io (con aiutino del prof però)! :D in effetti mi è venuta bene! :P quando so bene come risolvere il problema scrivo in modo decente... altrimenti provando e riprovando faccio macelli e non sto tanto a indentare! :(
si i puntatori li ho fatti... non li ho capiti troppo ma li ho fatti...
per la dichiarazione delle stringhe banali.. si lo sò... non è bello quello che ho scritto... ma non sapevo come farlo! :(
vai vai a far la spesa! :D :D :D poi voglio vedere il tuo programma (sempre che tu abbia tempo di farlo!)
Grazie 1000 ragazzi siete fin troppo gentili! :D
Si pero' a lui se non sbaglio serviva una versione interattiva che faceva scegliere la traduzione da seguire on the fly.
In questa versione hai tre comandi:
ita --> Passa alla modalita italiano->inglese
eng --> Passa alla modalita' inglese->italiano
exit --> Esce dal traduttore
Per ulteriori chiarimenti sono a disposizione.
Nota: Sarebbe meglio usare i puntatori con le stringhe, ma non li ho usati perche' non mi hai risposto e ho assunto che non li avete fatti. Ho cercato di rendere il codice il piu' leggibile possibile.
Ovviamente ci sono margini di miglioramento infiniti, ma visto che e' un esercizio scolastico meglio focalizzarsi sulla risoluzione del problema.
Il file in allegato.
P.S: windows.h e conio.h sono header specifici Microsoft, non ti conviene usarli ma sforzarti di usare solo funzioni del C standard (non sono presenti nello standard), anche se Fenomeno li ha usati solo per una funzione.
Ho cercato di mantenere il pezzo di codice che stavi scrivendo tu in modo da non renderti troppo difficile la lettura. Il ciclo do-while va avanti fino a quando non digiti exit sulla riga di comando, nel qual caso si esce dal ciclo e si ritorna 0 alla funzione main() (cioe' valore di uscita corretto).
Ciao
Fenomeno85
05-05-2005, 18:40
non mi sembra allucinante come versione :wtf:
cmq per la modifica con le tre scelte non la vedo così atroce vuole che esistano tre comandi?? basta modificare una minchiata te :D
ps: windows.h serve solo per system, conio.h per gets molto meglio che quella funzione del cavolo di scanf ... il migliore sarebbe fgets :O
/*
Programma realizzato da Fenomeno85.
Questo programma permette di effettuare delle traduzioni dall'italiano all'inglese e
viceversa.
*/
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define NWORD 10
#define LENGTH 1000
/* this function permits to translate the word */
int translate (char lang[], int type){
char ital[NWORD][LENGTH]={"ciao","bello","brutto"};
char engl[NWORD][LENGTH]={"hello","beautiful","orribol"};
int i;
for (i=0;i<NWORD;i++){
if (type == 1){
if (strcmp (lang, engl[i])==0){
printf ("Trad>ita:%s",ital[i]);
return (1);
}
}
else{
if (strcmp (lang, ital[i])==0){
printf ("Trad>:%s",engl[i]);
return (1);
}
}
}
return (-1);
}
int menu (void){
char scelta[LENGTH];
int ris;
char lang [LENGTH];
printf ("\nInsersci stringa:\t");
fflush (stdin);
gets (lang);
do{
printf ("\n'ita' per tradurre in ITA, 'eng' pe ENG e 'exit' per uscire\n");
printf ("\nScelta:\t");
fflush (stdin);
gets (scelta);
}while (strcmp(scelta,"ita")!=0 && strcmp(scelta,"exit")!=0 && strcmp(scelta,"eng")!=0);
if (strcmp(scelta,"ita")==0)
ris = translate (lang,1);
else{
if (strcmp(scelta,"eng")==0)
ris = translate (lang,2);
else return (0);
}
if (ris == -1) {
printf ("\nThe word doesn't exist in the database.\n");
}
}
/* function main */
int main (void){
int ret;
do {
ret = menu ();
} while (ret != 0);
return (1);
}
te così vi ho eliminato anche la windows.h ... cmq per la cronaca basta mettere per la maggior compatibilità tra linux e windows un bel #ifdef WIN32 e nessun problema alla fine system è una funzione di windows :O
~§~ Sempre E Solo Lei ~§~
non mi sembra allucinante come versione :wtf:
In che senso scusa.
cmq per la modifica con le tre scelte non la vedo così atroce vuole che esistano tre comandi?? basta modificare una minchiata te :D
Non ho detto che e' atroce :confused:
ps: windows.h serve solo per system, conio.h per gets molto meglio che quella funzione del cavolo di scanf ... il migliore sarebbe fgets :O
gets() e' una funzione standard, sta in stdio.h.
te così vi ho eliminato anche la windows.h ... cmq per la cronaca basta mettere per la maggior compatibilità tra linux e windows un bel #ifdef WIN32 e nessun problema alla fine system è una funzione di windows :O
~§~ Sempre E Solo Lei ~§~
Stiamo parlando di un esercizio scolastico non di un compilatore cross platform :D
RaouL_BennetH
05-05-2005, 19:00
non mi sembra allucinante come versione :wtf:
ps: windows.h serve solo per system, conio.h per gets molto meglio che quella funzione del cavolo di scanf ... il migliore sarebbe fgets
Scusatemi, Fenomeno e Mjordan, probabilmente sto per sparare una stupidaggine, ma da autodidatta alcune volte faccio fatica a capire determinate cose. Mi riferisco proprio alla funzione gets() la quale, se non erro, sarebbe da evitare in qualsiasi maniera perchè non permette il controllo della lunghezza di ciò che prende, diventando così probabile origine di buffer overflow.
E' una osservazione giusta o posso dire di nn capire niente di ciò che studio?
Thx.
RaouL.
Fenomeno85
05-05-2005, 19:06
Scusatemi, Fenomeno e Mjordan, probabilmente sto per sparare una stupidaggine, ma da autodidatta alcune volte faccio fatica a capire determinate cose. Mi riferisco proprio alla funzione gets() la quale, se non erro, sarebbe da evitare in qualsiasi maniera perchè non permette il controllo della lunghezza di ciò che prende, diventando così probabile origine di buffer overflow.
E' una osservazione giusta o posso dire di nn capire niente di ciò che studio?
Thx.
RaouL.
esatto :O la funziona fgets sarebbe da usare ma dopo in questo caso avrei dovuto anche fare un controllo e mettere il /0 delle stringhe dato che fgets non lo mette :O
~§~ Sempre E Solo Lei ~§~
RaouL_BennetH
05-05-2005, 19:10
esatto :O la funziona fgets sarebbe da usare ma dopo in questo caso avrei dovuto anche fare un controllo e mettere il /0 delle stringhe dato che fgets non lo mette :O
~§~ Sempre E Solo Lei ~§~
Grazie, mi sento rincuorato, almeno non sto studiando invano :)
THX!!
Fenomeno85
05-05-2005, 19:15
Grazie, mi sento rincuorato, almeno non sto studiando invano :)
THX!!
de nada :D
~§~ Sempre E Solo Lei ~§~
DoubleAJ
05-05-2005, 19:40
char engl[NWORD][LENGTH]={"hello","beautiful","orribol"};
Orribol :D :D :D ... a parte che si scriverebbe "horrible", comunque in inglese "brutto" si dice ugly (tanto x la cronaca) :p
ciao!
be' ragazzi, se proprio vogliamo dirla tutta anche l'inglese di Fenomeno non eccelle... :asd:
"this function permits to translate..." :asd:
to allow, allowed, allowed caro Fenomeno!!! :rolleyes: ^^'
cmq (tanto per aggiungere qualcosa di costruttivo :D) tieni presente SkyNut, che se usi un semplice vettore il tuo dizionario sarà di pessima performance quando le parole inizieranno ad essere (decine di) migliaia; quello che dovresti fare è usare un albero binario di ricerca oppure (meglio ancora) sempre un vettore, solo che quando cerchi la parola devi effettuare la ricerca binaria! ;)
ti faccio un esempio:
typedef struct _ENTRY {
char *pEng, *pIta;
} ENTRY, *PENTRY;
#define nEntries 4
ENTRY pDic[nEntries] = {
{"hello", "ciao"},
{"biutiful", "bello"},
{"agli", "brutto"},
{"horribbol", "orribbile"}
};
char *TranslateEI(char *pEng) {
int i = nEntries,
j = nEntries / 2;
while (j && (i >= 1) && (i <= nEntries)) {
int nCmp = stricmp(pEng, pDic[i - 1].pEng);
if (nCmp < 0) {
i -= j;
}
else if (nCmp > 0) {
i += j;
}
else {
return pDic[i - 1].pIta;
}
j /= 2;
}
return NULL;
}
ovviamente qui ho scritto solo la traduzione da inglese a italiano, ma il viceversa è analogo. (spero di non aver scritto caxxate nel codice, non l'ho provato :p)
aggiungo anche che più che strcmp dovreste usare stricmp: la comparazione deve essere case insensitive, altrimenti se l'utente scrive "BELLO" anziché "bello" non riceverà la traduzione. ;)
Fenomeno85
05-05-2005, 21:44
be' ragazzi, se proprio vogliamo dirla tutta anche l'inglese di Fenomeno non eccelle... :asd:
"this function permits to translate..." :asd:
to allow, allowed, allowed caro Fenomeno!!! :rolleyes: ^^'
dai su :asd:
~§~ Sempre E Solo Lei ~§~
Fenomeno85
05-05-2005, 21:49
scusa spiegami perchè this function permits è sbagliato?? secondo me è corretto :O
~§~ Sempre E Solo Lei ~§~
[...](spero di non aver scritto caxxate nel codice, non l'ho provato :p)[...]
e infatti avevo scritto caxxate :asd:
col vettore non può funzionare perché le associazioni nel vettore sono ordinate in ordine alfabetico secondo le parole inglesi, quindi le parole italiane non sono in ordine alfabetico; di conseguenza la traduzione dall'italiano all'inglese con quel sistema era impossibile. :(
bisogna usare per forza un albero binario di ricerca i cui nodi sono così definiti:
typedef struct _NODE {
char *pEng, *pIta;
struct _NODE *pLeft1, *pRight1;
struct _NODE *pLeft2, *pRight2;
} NODE, *TREE;
in questo modo i nodi dell'albero sono linkati in due maniere (gli alberi di fatto sono due): pLeft1 e pRight1 linkano in maniera tale da ordinare i vocaboli inglesi, e pLeft2 e pRight2 quelli italiani (oppure può essere anche il contrario se vuoi).
scusa spiegami perchè this function permits è sbagliato?? secondo me è corretto :O
~§~ Sempre E Solo Lei ~§~
doh! hai ragione, "to permit" esiste ^^'
vabbè però dai, secondo me è inglese maccheronico, in genere io trovo "allows"; permit avrà una sfumatura diversa :p
Fenomeno85
05-05-2005, 21:51
e infatti avevo scritto caxxate :asd:
col vettore non può funzionare perché le associazioni nel vettore sono ordinate in ordine alfabetico secondo le parole inglesi, quindi le parole italiane non sono in ordine alfabetico; di conseguenza la traduzione dall'italiano all'inglese con quel sistema era impossibile. :(
bisogna usare per forza un albero binario di ricerca i cui nodi sono così definiti:
typedef struct _NODE {
char *pEng, *pIta;
struct _NODE *pLeft1, *pRight1;
struct _NODE *pLeft2, *pRight2;
} NODE, *TREE;
in questo modo i nodi dell'albero sono linkati in due maniere (gli alberi di fatto sono due): pLeft1 e pRight1 linkano in maniera tale da ordinare i vocaboli inglesi, e pLeft2 e pRight2 quelli italiani (oppure può essere anche il contrario se vuoi).
scusa è ma se questo manco sa usare le funzioni e scrivere del codice pulito (senza offesa è) te gli fai fare un albero??
~§~ Sempre E Solo Lei ~§~
Fenomeno85
05-05-2005, 21:52
doh! hai ragione, "to permit" esiste ^^'
vabbè però dai, secondo me è inglese maccheronico, in genere io trovo "allows"; permit avrà una sfumatura diversa :p
:mbe: sta volta ti salvi la prossima vengo a casa tua e te stacco le braccine :D
~§~ Sempre E Solo Lei ~§~
ah dimenticavo, sempre x SkyNut: se vuoi puoi considerare anche l'eventualità che una parola abbia diversi "alias", cioè più traduzioni; in tal caso basta che, sempre all'interno della struct NODE, definisci un array di alias, così:
typedef struct _NODE {
char *pEng, *pIta;
struct _NODE *pAliasesIta, *pAliasesEng;
int nAliasesIta, nAliasesEng;
struct _NODE *pLeft1, *pRight1;
struct _NODE *pLeft2, *pRight2;
} NODE, *TREE;
dove naturalmente pAliasesIta contiene le diverse traduzioni italiane di pEng, e pAliasesEng le traduzioni inglesi di pIta.
Fenomeno85
05-05-2005, 21:58
ah dimenticavo, sempre x SkyNut: se vuoi puoi considerare anche l'eventualità che una parola abbia diversi "alias", cioè più traduzioni; in tal caso basta che, sempre all'interno della struct NODE, definisci un array di alias, così:
typedef struct _NODE {
char *pEng, *pIta;
struct _NODE *pAliasesIta, *pAliasesEng;
int nAliasesIta, nAliasesEng;
struct _NODE *pLeft1, *pRight1;
struct _NODE *pLeft2, *pRight2;
} NODE, *TREE;
dove naturalmente pAliasesIta contiene le diverse traduzioni italiane di pEng, e pAliasesEng le traduzioni inglesi di pIta.
imho per me non sta capendo che è una foglia o nodo :O
~§~ Sempre E Solo Lei ~§~
:mbe: sta volta ti salvi la prossima vengo a casa tua e te stacco le braccine :D
~§~ Sempre E Solo Lei ~§~
:mc: :ops2: :fiufiu: :lamer: :nonio: :eekk:
Fenomeno85
05-05-2005, 22:10
oppure potremmo fare un bel archivio indicizzato che ne pensi? :D
~§~ Sempre E Solo Lei ~§~
oppure potremmo fare un bel archivio indicizzato che ne pensi? :D
oddiosanto, fai quello che ca**o ti pare ma ti prego, CAMBIA AVATAR!!!
O__________________O'''
:oink: :oink: :oink:
ma come ti salta in mente di farlo a rotazione?!? non posso fare a meno di notarlo, mi distrae peggio di quei pupazzetti che appendi in macchina allo specchietto :oink:
Fenomeno85
06-05-2005, 08:20
oddiosanto, fai quello che ca**o ti pare ma ti prego, CAMBIA AVATAR!!!
O__________________O'''
:oink: :oink: :oink:
ma come ti salta in mente di farlo a rotazione?!? non posso fare a meno di notarlo, mi distrae peggio di quei pupazzetti che appendi in macchina allo specchietto retrovisore :oink:
pure che mi son sbattuto a cercare le immagini e farmi sta animazione dovrei toglierla?? :D scordatelo :D
~§~ Sempre E Solo Lei ~§~
Grazie, mi sento rincuorato, almeno non sto studiando invano :)
THX!!
Gia' e' cosi' atroce che addirittura GCC come compilatore emette un warning quando la trova:
/tmp/ccE3hL9j.o(.text+0x23): In function `main':
: warning: the `gets' function is dangerous and should not be used.
Il fatto e' che per programmi stupidi e' sempre uno dei migliori modi per prendere in input una stringa. Infatti viene usata su molti esempi dove un input sicuro non e' necessario.
Fenomeno85
06-05-2005, 16:28
Gia' e' cosi' atroce che addirittura GCC come compilatore emette un warning quando la trova:
Il fatto e' che per programmi stupidi e' sempre uno dei migliori modi per prendere in input una stringa. Infatti viene usata su molti esempi dove un input sicuro non e' necessario.
si diciamo che per un programmino del menga gets si usa ma se devi fare qualche progetto quella è una funzione inesistente :D
~§~ Sempre E Solo Lei ~§~
ciao a tutti! ecco cosa ho creato (è come lo vuole il prof quindi non ditemi che si potrebbe mettere meglio!):
#include<stdio.h>
#include<string.h>
#define NWORD 5
#define LENGTH 100
int itaeng();
int engita();
int i,j,z=-1,it,en,found=0,ex=1;
char lang[50], ita[]="ita", eng[]="eng", par[100], exit1[]="exit";
char ital[NWORD][LENGTH]={"ciao","bello","brutto","cane","alga"};
char engl[NWORD][LENGTH]={"hello","biutiful","orribol","dog","marinflower"};
main(){
do{
do{
printf("Trad>");
scanf("%s", &lang);
ex=strcmp(lang, exit1);
z=strcmp(lang, ita);
if(z==0)
found=itaeng();
else{
z=strcmp(lang, eng);
if(z==0)
found=engita();
}
}
while(z!=0&&ex!=0);
if(found==0&&ex!=0)
printf("\nThe word doesn't exist in the database.\n");
}
while(ex!=0);
}
int itaeng(){
printf("Trad>ita-eng>");
scanf("%s", &par);
for (i=0;i<NWORD;i++){
if(strcmp(par, ital[i])==0){
printf("%s\n", engl[i]);
return 1;
}
else
if(strcmp(par,eng)==0)
found=engita();
else
if(strcmp(par,exit1)==0)
ex=0;
}
return 0;
}
int engita(){
printf("Trad>eng-ita>");
scanf("%s", &par);
for (i=0;i<NWORD;i++){
if (strcmp(par, engl[i])==0){
printf("%s\n", ital[i]);
return 1;
}
else
if(strcmp(par,ita)==0)
found=itaeng();
else
if(strcmp(par,exit1)==0)
ex=0;
}
return 0;
}
e devo ancora metterlo apposto... che ne dite? ok non è il massimo ancora ha un problemino.. e forse 2...
da fenomeno:
scusa è ma se questo manco sa usare le funzioni e scrivere del codice pulito (senza offesa è) te gli fai fare un albero??
LOOOOOOOOOOOOOOOOOOOOOL! mi sento inferiore... :cry:
Fenomeno85
06-05-2005, 16:35
ciao a tutti! ecco cosa ho creato (è come lo vuole il prof quindi non ditemi che si potrebbe mettere meglio!):
#include<stdio.h>
#include<string.h>
#define NWORD 5
#define LENGTH 100
int itaeng();
int engita();
int i,j,z=-1,it,en,found=0,ex=1;
char lang[50], ita[]="ita", eng[]="eng", par[100], exit1[]="exit";
char ital[NWORD][LENGTH]={"ciao","bello","brutto","cane","alga"};
char engl[NWORD][LENGTH]={"hello","biutiful","orribol","dog","marinflower"};
main(){
do{
do{
printf("Trad>");
scanf("%s", &lang);
ex=strcmp(lang, exit1);
z=strcmp(lang, ita);
if(z==0)
found=itaeng();
else{
z=strcmp(lang, eng);
if(z==0)
found=engita();
}
}
while(z!=0&&ex!=0);
if(found==0&&ex!=0)
printf("\nThe word doesn't exist in the database.\n");
}
while(ex!=0);
}
e devo ancora metterlo apposto... che ne dite? ok non è il massimo ancora ha un problemino.. e forse 2...
da fenomeno:
scusa è ma se questo manco sa usare le funzioni e scrivere del codice pulito (senza offesa è) te gli fai fare un albero??
LOOOOOOOOOOOOOOOOOOOOOL! mi sento inferiore... :cry:
no all'inizio è ovvio ma devi renderti conto che la programmazione è uno stile ;) con la pratica si impara ;)
bon ma non vedo le funzioni del cerca?? :D
~§~ Sempre E Solo Lei ~§~
il copiaincolla è sballato e ho messo mezzo codice! :( ora è apposto! :P
no all'inizio è ovvio ma devi renderti conto che la programmazione è uno stile con la pratica si impara
si si non mi sono offeso! ;) è da qualche mese che faccio il c... ancora ne ho di strada da fare... :-O
sono un po'sballati i tab nella funzione engita... cavolo di blocco note... vabbè metterò apposto... :(
Quante sparacazzate solo per scrivere un programmino di esempio scolastico che illustra l'uso di una strcmp() su un array di stringhe...
Agli alberi binari siamo arrivati... Strano non ti abbiano consigliato le tabelle hash a indirizzamento lineare aperto con hashing ad analisi digitale... :rolleyes:
Dai su certe volte si cade nel ridicolo.
Quante sparacazzate solo per scrivere un programmino di esempio scolastico che illustra l'uso di una strcmp() su un array di stringhe...
Agli alberi binari siamo arrivati... Strano non ti abbiano consigliato le tabelle hash a indirizzamento lineare aperto con hashing ad analisi digitale... :rolleyes:
Dai su certe volte si cade nel ridicolo.
hiihihi si in effetti sono leggermente incomprensibili per me quelle cose! :( comunque cel'ho fatta! funziona! c'è solo un errorino che appena mi passano dev metto apposto! ;)
Fenomeno85
06-05-2005, 21:13
Quante sparacazzate solo per scrivere un programmino di esempio scolastico che illustra l'uso di una strcmp() su un array di stringhe...
Agli alberi binari siamo arrivati... Strano non ti abbiano consigliato le tabelle hash a indirizzamento lineare aperto con hashing ad analisi digitale... :rolleyes:
Dai su certe volte si cade nel ridicolo.
guarda che io il codice l'ho postato :O
~§~ Sempre E Solo Lei ~§~
guarda che io il codice l'ho postato :O
~§~ Sempre E Solo Lei ~§~
Che hai la coda di paglia :D
Fenomeno85
06-05-2005, 22:04
Che hai la coda di paglia :D
no però stavo pensando che un bel archivio indicizzato da fare non sarebbe male :D
~§~ Sempre E Solo Lei ~§~
RaouL_BennetH
06-05-2005, 23:48
Gia' e' cosi' atroce che addirittura GCC come compilatore emette un warning quando la trova:
Il fatto e' che per programmi stupidi e' sempre uno dei migliori modi per prendere in input una stringa. Infatti viene usata su molti esempi dove un input sicuro non e' necessario.
L'avevo notato infatti quando compilavo con linux, ma se posso, vorrei fare un'ulteriore domanda:
Dato che nell'uso di un programma, non dovrebbe essere usata, non sarebbe meglio abbandonarla subito?
Mi spiego, su diversi testi che ho trovato in giro, questa funzione, benchè dicono che non dovrebbe essere usata, puntualmente la usano ed abusano negli esempi. Non pensate che possa essere un modo sbagliato di insegnare qualcosa sopratutto a chi è agli inizi?
L'avevo notato infatti quando compilavo con linux, ma se posso, vorrei fare un'ulteriore domanda:
Dato che nell'uso di un programma, non dovrebbe essere usata, non sarebbe meglio abbandonarla subito?
Mi spiego, su diversi testi che ho trovato in giro, questa funzione, benchè dicono che non dovrebbe essere usata, puntualmente la usano ed abusano negli esempi. Non pensate che possa essere un modo sbagliato di insegnare qualcosa sopratutto a chi è agli inizi?
No perche' fin quando sono esempi e sei a conoscenza dei suoi pericoli non fa del male a nessuno. La funzione gets() e' un modo veloce di prendere una stringa, quindi ha dei grossi vantaggi:
1) Mantiene il codice pulito. Si fa input di una stringa con una sola funzione.
2) Facile utilizzo e comprensione.
3) Consente di concentrarsi sull'argomento dell'esempio, no sull'input da tastiera.
Chi e' agli inizi, comunque viene avvertito dei pericoli di tale funzione. Ma comunque deve focalizzarsi sull'apprendimento del linguaggio (il cui esempio e' uno strumento indispensabile) e non deve stare a pensare ai pericoli di una programmazione scorretta (che invece dev'essere il cardine nella produzione e comunque in genere e' un argomento che si apprende DOPO aver imparato un linguaggio). Inoltre chi e' gli inizi in genere non scrive software la cui funzione gets() possa arrecare danni all'umanita', stai tranquillo. ;)
Fenomeno85
07-05-2005, 10:29
No perche' fin quando sono esempi e sei a conoscenza dei suoi pericoli non fa del male a nessuno. La funzione gets() e' un modo veloce di prendere una stringa, quindi ha dei grossi vantaggi:
1) Mantiene il codice pulito. Si fa input di una stringa con una sola funzione.
2) Facile utilizzo e comprensione.
3) Consente di concentrarsi sull'argomento dell'esempio, no sull'input da tastiera.
Chi e' agli inizi, comunque viene avvertito dei pericoli di tale funzione. Ma comunque deve focalizzarsi sull'apprendimento del linguaggio (il cui esempio e' uno strumento indispensabile) e non deve stare a pensare ai pericoli di una programmazione scorretta (che invece dev'essere il cardine nella produzione e comunque in genere e' un argomento che si apprende DOPO aver imparato un linguaggio). Inoltre chi e' gli inizi in genere non scrive software la cui funzione gets() possa arrecare danni all'umanita', stai tranquillo. ;)
:mano:
esatto la funzione da utilizzare sarebbe la fgets il problemino è che ti devi implementare un modo per inserire il /0 ;) altrimenti non è una stringa :O
oppure un altro modo è usare getc / getch :O ma anche qui devi implementarti i casi necessari per il corretto funzionamento :D
~§~ Sempre E Solo Lei ~§~
RaouL_BennetH
07-05-2005, 13:21
No perche' fin quando sono esempi e sei a conoscenza dei suoi pericoli non fa del male a nessuno. La funzione gets() e' un modo veloce di prendere una stringa, quindi ha dei grossi vantaggi:
1) Mantiene il codice pulito. Si fa input di una stringa con una sola funzione.
2) Facile utilizzo e comprensione.
3) Consente di concentrarsi sull'argomento dell'esempio, no sull'input da tastiera.
Chi e' agli inizi, comunque viene avvertito dei pericoli di tale funzione. Ma comunque deve focalizzarsi sull'apprendimento del linguaggio (il cui esempio e' uno strumento indispensabile) e non deve stare a pensare ai pericoli di una programmazione scorretta (che invece dev'essere il cardine nella produzione e comunque in genere e' un argomento che si apprende DOPO aver imparato un linguaggio). Inoltre chi e' gli inizi in genere non scrive software la cui funzione gets() possa arrecare danni all'umanita', stai tranquillo. ;)
Innanzitutto, grazie per l'attenzione e per la risposta. Però, se non ti spiace, vorrei insistere un pochino. Io ho cominciato qualche mesetto fa a studiare alcuni linguaggi e, la prima volta che compilai un programmino con gcc, ebbi il warning relativo alla gets(). Ora, pensando fosse un mio errore, cercai su google in merito a tale warning e così trovai che, in qualsiasi guida, la sconsigliavano preferendo fgets(). Da allora, per qualsiasi "hello world" io faccia, mi è ormai automatico utilizzare solo fgets(). Cmq, il mio piccolo caso è insignificante perchè appunto, le uniche cose che fin'ora sono riuscito a fare con il C sono una rubrica e un programma che riceve, legge e memorizza dei dati dalla seriale, quindi, diciamo degli "ciao mondo" con qualche linea in più, ma, con mia grande sorpesa, trovo nel codice di persone esperte, e codice che si trova su pc da lavoro, una marea di gets() e, per finire, molte volte gli autori, pur a conoscenza di tale "rischio", preferivano la via più comoda a quella più sicura.
P.S.: ma poi...più comoda perchè? per non inserire un piccolo buffer?!?
Grazie ancora.
RaouL.
Fenomeno85
07-05-2005, 18:13
Innanzitutto, grazie per l'attenzione e per la risposta. Però, se non ti spiace, vorrei insistere un pochino. Io ho cominciato qualche mesetto fa a studiare alcuni linguaggi e, la prima volta che compilai un programmino con gcc, ebbi il warning relativo alla gets(). Ora, pensando fosse un mio errore, cercai su google in merito a tale warning e così trovai che, in qualsiasi guida, la sconsigliavano preferendo fgets(). Da allora, per qualsiasi "hello world" io faccia, mi è ormai automatico utilizzare solo fgets(). Cmq, il mio piccolo caso è insignificante perchè appunto, le uniche cose che fin'ora sono riuscito a fare con il C sono una rubrica e un programma che riceve, legge e memorizza dei dati dalla seriale, quindi, diciamo degli "ciao mondo" con qualche linea in più, ma, con mia grande sorpesa, trovo nel codice di persone esperte, e codice che si trova su pc da lavoro, una marea di gets() e, per finire, molte volte gli autori, pur a conoscenza di tale "rischio", preferivano la via più comoda a quella più sicura.
P.S.: ma poi...più comoda perchè? per non inserire un piccolo buffer?!?
Grazie ancora.
RaouL.
allora l'utilizzo di gets come detto prima può provocare un errore di buffer overflow gli autori mettono questa funzione per semplificarsi la vita e farti capire come detto prima cosa l'esercizio deve fare ;)
buffer overflow non è un buffer ma è un errore cioè vai in zone di memoria che non ti sono state allocate :O moolto pericolosi. Per causa di questi problemi si son verificate molte falle :O
~§~ Sempre E Solo Lei ~§~
buffer overflow non è un buffer ma è un errore cioè vai in zone di memoria che non ti sono state allocate :O moolto pericolosi.
ha-hem... andavi meglio in inglese :rolleyes:
Fenomeno85
07-05-2005, 18:23
ha-hem... andavi meglio in inglese :rolleyes:
to rompi scatole :D
A buffer overflow occurs when a program or process tries to store more data in a buffer (temporary data storage area) than it was intended to hold. Since buffers are created to contain a finite amount of data, the extra information - which has to go somewhere - can overflow into adjacent buffers, corrupting or overwriting the valid data held in them. Although it may occur accidentally through programming error, buffer overflow is an increasingly common type of security attack on data integrity. In buffer overflow attacks, the extra data may contain codes designed to trigger specific actions, in effect sending new instructions to the attacked computer that could, for example, damage the user's files, change data, or disclose confidential information. Buffer overflow attacks are said to have arisen because the C programming language supplied the framework, and poor programming practices supplied the vulnerability.
.
~§~ Sempre E Solo Lei ~§~
to rompi scatole :D
asd :D
^_^'
A buffer overflow occurs when a program or process tries to store more data in a buffer (temporary data storage area) than it was intended to hold. Since buffers are created to contain a finite amount of data, the extra information - which has to go somewhere - can overflow into adjacent buffers, corrupting or overwriting the valid data held in them. Although it may occur accidentally through programming error, buffer overflow is an increasingly common type of security attack on data integrity. In buffer overflow attacks, the extra data may contain codes designed to trigger specific actions, in effect sending new instructions to the attacked computer that could, for example, damage the user's files, change data, or disclose confidential information. Buffer overflow attacks are said to have arisen because the C programming language supplied the framework, and poor programming practices supplied the vulnerability.
LOL e siccome inglese è la tua materia preferita me l'hai scritto in inglese :D
cmq la tua frase iniziale differisce da quello che hai scritto qui (che è verissimo) :)
RaouL_BennetH
08-05-2005, 12:31
allora l'utilizzo di gets come detto prima può provocare un errore di buffer overflow gli autori mettono questa funzione per semplificarsi la vita e farti capire come detto prima cosa l'esercizio deve fare ;)
buffer overflow non è un buffer ma è un errore cioè vai in zone di memoria che non ti sono state allocate :O moolto pericolosi. Per causa di questi problemi si son verificate molte falle :O
~§~ Sempre E Solo Lei ~§~
Ma questo lo so, cioè, è la prima cosa che ho capito quando ebbi quel warning e facendo le ricerche. Perciò, insisto, non sarebbe meglio, a livello didattico, semplicemente spiegarla ma non far abituare ad utilizzarla?
Fenomeno85
08-05-2005, 12:46
Ma questo lo so, cioè, è la prima cosa che ho capito quando ebbi quel warning e facendo le ricerche. Perciò, insisto, non sarebbe meglio, a livello didattico, semplicemente spiegarla ma non far abituare ad utilizzarla?
prova a usare fgets con le stringhe e guarda che cosa devi implementare :O allora capirai che gets fai prima a livello didattico
~§~ Sempre E Solo Lei ~§~
RaouL_BennetH
08-05-2005, 13:00
prova a usare fgets con le stringhe e guarda che cosa devi implementare :O allora capirai che gets fai prima a livello didattico
~§~ Sempre E Solo Lei ~§~
Scusatemi, ma sono testone :muro: ma mi chiedo, se una funzione non è "sicura", proprio a livello didattico, non dovrebbe essere ampiamente scoraggiata?
Per quanto riguarda la fgets() con le stringhe, è certo che l'implementazione è un pelino più complessa, ma sudare un pò di più per scrivere codice sicuro, non dovrebbe essere una regola fondamentale?
RaouL_BennetH
08-05-2005, 13:05
ad esempio, io per una semplicissimissima rubrichetta in C, non ho usato gets() eppure sono un autodidatta e sono agli inizi, ma semplicemente ho fatto così:
......
#define ELENCO 100
........
else if( selection == 2 )
{
char ind[ELENCO];
opfp = fopen(opfilename, "r");
while( !feof(opfp) )
{
fgets(ind, ELENCO, opfp);
printf("%s", ind);
}
}
Scusatemi, ma sono testone :muro: ma mi chiedo, se una funzione non è "sicura", proprio a livello didattico, non dovrebbe essere ampiamente scoraggiata?
si, dovrebbe essere scoraggiata, ma solo se la didattica in quel momento si sta focalizzando sulla sicurezza; per adesso stiamo solo creando un idiotissimo dizionario per capire come funziona la stricmp (e vorrei precisare che in teoria anche la stricmp può essere pericolosa...)
si, dovrebbe essere scoraggiata, ma solo se la didattica in quel momento si sta focalizzando sulla sicurezza; per adesso stiamo solo creando un idiotissimo dizionario per capire come funziona la stricmp (e vorrei precisare che in teoria anche la stricmp può essere pericolosa...)
Ecco, per esempio tu dovresti focalizzarti sul capire che la funzione si chiama strcmp() e non stricmp() :D
Ecco, per esempio tu dovresti focalizzarti sul capire che la funzione si chiama strcmp() e non stricmp() :D
spiritoso, sono due cose diverse... :p
DanieleC88
09-05-2005, 12:00
spiritoso, sono due cose diverse... :p
Vero, ne esistono due diverse. :)
In ogni caso, come fa strcmp() ad essere pericolosa?
Fenomeno85
09-05-2005, 12:21
Vero, ne esistono due diverse. :)
In ogni caso, come fa strcmp() ad essere pericolosa?
non ho provato ma se mandi un array di caratteri senza terminatore di stringa forse da problemi
~§~ Sempre E Solo Lei ~§~
Vero, ne esistono due diverse. :)
In ogni caso, come fa strcmp() ad essere pericolosa?
se non trova terminatore in nessuno dei due il "for" va vanti. Prima o poi esce dalla memoria del programma e tenta di leggere quella di un'altro processo e quando lo fa il sistema operativo se ne accorge e uccide tutto il programma.
se si vuole andare sul sicuro è meglio usare strncmp
ciao ;)
Fenomeno85
09-05-2005, 12:35
se non trova terminatore in nessuno dei due il "for" va vanti. Prima o poi esce dalla memoria del programma e tenta di leggere quella di un'altro processo e quando lo fa il sistema operativo se ne accorge e uccide tutto il programma.
se si vuole andare sul sicuro è meglio usare strncmp
ciao ;)
urca avevo ragione :D
ottima quella funzione :D
int strncmp( const char *string1, const char *string2, size_t count );
~§~ Sempre E Solo Lei ~§~
se non trova terminatore in nessuno dei due il "for" va vanti. Prima o poi esce dalla memoria del programma e tenta di leggere quella di un'altro processo e quando lo fa il sistema operativo se ne accorge e uccide tutto il programma.
ha-ehm... :rolleyes:
poi voi direte che rompo le balle, ma che ci posso fare? :D vogliamo piuttosto lasciare che gli inesperti imparino cose imprecise/errate? :p
DanieleC88
09-05-2005, 12:51
se non trova terminatore in nessuno dei due il "for" va vanti. Prima o poi esce dalla memoria del programma e tenta di leggere quella di un'altro processo e quando lo fa il sistema operativo se ne accorge e uccide tutto il programma.
se si vuole andare sul sicuro è meglio usare strncmp
ciao ;)
Grazie mille!
A proposito: in inglese si dice VICIOUS, non VICIUS (mi pare). ;)
DanieleC88
09-05-2005, 12:52
ottima quella funzione :D
int strncmp( const char *string1, const char *string2, size_t count );
~§~ Sempre E Solo Lei ~§~
...Non la conoscevi? :wtf:
Mi deludi! :D
Fenomeno85
09-05-2005, 12:55
...Non la conoscevi? :wtf:
Mi deludi! :D
per le minchiate che ho sempre fatto strcmp o stricmp mi bastavano :O
~§~ Sempre E Solo Lei ~§~
DanieleC88
09-05-2005, 12:55
se non trova terminatore in nessuno dei due il "for" va vanti.
Non si fa prima con un while?
while (*str1++ && *str2++)
{
// et cetera
}
E così - credo - si evita anche il rischio.
Fenomeno85
09-05-2005, 12:56
Non si fa prima con un while?
while (*str1++ && *str2++)
{
// et cetera
}
E così - credo - si evita anche il rischio.
no dato che potresti andare avanti troppo
~§~ Sempre E Solo Lei ~§~
DanieleC88
09-05-2005, 12:57
per le minchiate che ho sempre fatto strcmp o stricmp mi bastavano :O
~§~ Sempre E Solo Lei ~§~
:D
P.S.: bell'avatar! :oink: - ;)
Fenomeno85
09-05-2005, 12:57
:D
P.S.: bell'avatar! :oink: - ;)
fatto io fatto io :D
cmq dovresti mettere anche il controllo della lunghezza per essere sicuri ;)
~§~ Sempre E Solo Lei ~§~
DanieleC88
09-05-2005, 12:59
no dato che potresti andare avanti troppo
~§~ Sempre E Solo Lei ~§~
Tu dici? A me sembra il contrario: se una delle due stringhe è terminata, il controllo è negativo e il while si ferma.
Non si fa prima con un while?
while (*str1++ && *str2++)
{
// et cetera
}
E così - credo - si evita anche il rischio.
no, il "rischio" non c'è modo di evitarlo: se il terminatore manca, tu devi continuare a supporre che la stringa non sia finita e continuare.
PS: io veramente uso sempre il for, e raramente il do; il while mai perché può essere sostituito dal for :)
DanieleC88
09-05-2005, 13:00
fatto io fatto io :D
Chi è la giuovine donzella? :D
Tu dici? A me sembra il contrario: se una delle due stringhe è terminata, il controllo è negativo e il while si ferma.
stiamo analizzando il caso in cui nessuna delle due stringhe abbia il terminatore; è quello il "caso rischioso" ;)
Chi è la giuovine donzella? :D
gli sparerei a fenomeno, mado', cioè quell'avatar mi sta assuefacendo e mi sta rendendo sterile :cry:
cmq a sto punto so curioso pure io di sapere chi è :oink:
Chi è la giuovine donzella? :D
"chi è sta troia" vuoi dire :D :asd:
vabbè dai, facciamoci dire il nome e poi basta con gli OT
(andiamo a cercare il sito della gnocca :oink: )
Fenomeno85
09-05-2005, 13:08
Chi è la giuovine donzella? :D
bho è una modella di costumi :asd:
cmq il modo si potrebbe anche fare tranquillamente tipo
bool test_terminatore (char stringa[], int iNum){
for (int i=0;i<iNum; i++){
if (stringa[i] == '\0')
return (treu):
}
return (false);
}
int main (void){
bool val, val2;
char stringa[MAX], stringa2[MAX];
.........
val = test_terminatore (stringa, MAX);
val2= test_terminatore (stringa2, MAX);
if (val && val2)
ris = strcmp (stringa, stringa2);
.........
}
non l'ho testata, l'ho scritta a botta ma dovrebbe andare :D
~§~ Sempre E Solo Lei ~§~
Fenomeno85
09-05-2005, 13:09
gli sparerei a fenomeno, mado', cioè quell'avatar mi sta assuefacendo e mi sta rendendo sterile :cry:
cmq a sto punto so curioso pure io di sapere chi è :oink:
grazie grazie :cry: come mi vuoi bene :asd:
mi sembra che iniziava con f se non erro :D
~§~ Sempre E Solo Lei ~§~
Non si fa prima con un while?
while (*str1++ && *str2++)
{
// et cetera
}
E così - credo - si evita anche il rischio.
Nota le "" attorno al for.
A proposito: in inglese si dice VICIOUS, non VICIUS (mi pare).
Si questo lo sapevo. Ma mica volevo scrivere vicious. :p
ciao ;)
ha-ehm... :rolleyes:
poi voi direte che rompo le balle, ma che ci posso fare? :D vogliamo piuttosto lasciare che gli inesperti imparino cose imprecise/errate? :p
:confused:
ciao ;)
Fenomeno85
09-05-2005, 13:19
:confused:
ciao ;)
tranquillo è da un pò che è acido :O
~§~ Sempre E Solo Lei ~§~
tranquillo è da un pò che è acido :O
~§~ Sempre E Solo Lei ~§~
:asd:
tranquillo è da un pò che è acido :O
bas****o cambia avataaaaaaaar!!!!! :cry: :D
o almeno setta un intervallo di tempo maggiore tra un fotogramma e l'altro, che qui già mi si rizza di meno!!!! :cry:
DanieleC88
09-05-2005, 18:33
Nota le "" attorno al for.
E potevi anche essere più chiaro, no? :p
Si questo lo sapevo. Ma mica volevo scrivere vicious. :p
ciao ;)
:confused:
E allora che volevi scrivere? Sarà mica un acronimo? (oddio, no, speriamo di no, già ce ne sono troppi, di acronimi...)
DanieleC88
09-05-2005, 18:40
"chi è sta troia" vuoi dire :D :asd:
Bravo, vedo che ci capiamo! :D
Però, Fenomeno85, dai, ha ragione 71104: e se trovi qualcuno debole di cuore? Te lo porti sulla coscienza a vita! Come minimo gli viene un infarto, dopo averla vista...
Fenomeno85
09-05-2005, 19:06
Bravo, vedo che ci capiamo! :D
Però, Fenomeno85, dai, ha ragione 71104: e se trovi qualcuno debole di cuore? Te lo porti sulla coscienza a vita! Come minimo gli viene un infarto, dopo averla vista...
fa nada :O io mi sto rompendo i maroni a cercare di programmare con il 68000 e poi il mio avatar è troppo bello :D
cmq il codice che ho postato qualcuno l'ha testato??
~§~ Sempre E Solo Lei ~§~
DanieleC88
09-05-2005, 19:16
fa nada :O io mi sto rompendo i maroni a cercare di programmare con il 68000 e poi il mio avatar è troppo bello :D
cmq il codice che ho postato qualcuno l'ha testato??
~§~ Sempre E Solo Lei ~§~
Ti stai occupando di assembly? Allora ti sottoporrò un piccolo tutorial che sto scrivendo, ma in assembly sono una pippa, con rispetto parlando. :D
Se vuoi puoi aiutarmi. (se vuoi, ma so che *non* vuoi :))
Il codice che tu hai postato non se l'è cagato nessuno. :asd:
P.S.: forse stiamo andando troppo OT. Meglio fermarci qui, prima che cionci ci ammazzi tutti. Meno male che per ora è incatenato e non può farci ancora niente, ma sta provando in tutti i modi a liberarsi... facciamo attenzione...
fa nada :O io mi sto rompendo i maroni a cercare di programmare con il 68000 e poi il mio avatar è troppo bello :D
cmq il codice che ho postato qualcuno l'ha testato??
beati voi che fate ancora il 68000, noi ci stiamo fracassando le palle sui powerpc (se qualcuno si azzarda a dire che sono ottimi perché sono RISC non so quanto rimane vivo...); cmq no, il tuo codice io non l'ho provato, ma non vedo che utilità potrebbe avere visto che c'è la comoda strncmp con anche la versione insensitive (strnicmp ;))
Ti stai occupando di assembly? Allora ti sottoporrò un piccolo tutorial che sto scrivendo, ma in assembly sono una pippa, con rispetto parlando. :D
Se vuoi puoi aiutarmi. (se vuoi, ma so che *non* vuoi :))
guarda, io se vuoi conosco bene l'assembly degli x86 (l'unico che veramente servirà (forse) a qualcosa nella vita, e l'unico che si guardano bene dall'insegnarci all'uni), quindi se vuoi sapere qualcosa te la posso dire io, ma non esagerare ;)
diciamo che se vuoi sapere qualcosa di assembly, fai un 3d su hwupgrade e io *probabilmente* risponderò :p
ciao
Fenomeno85
09-05-2005, 19:22
beati voi che fate ancora il 68000, noi ci stiamo fracassando le palle sui powerpc (se qualcuno si azzarda a dire che sono ottimi perché sono RISC non so quanto rimane vivo...); cmq no, il tuo codice io non l'ho provato, ma non vedo che utilità potrebbe avere visto che c'è la comoda strncmp con anche la versione insensitive (strnicmp ;))
se si vuole utilizzare la strcmp :D
~§~ Sempre E Solo Lei ~§~
DanieleC88
10-05-2005, 15:42
diciamo che se vuoi sapere qualcosa di assembly, fai un 3d su hwupgrade e io *probabilmente* risponderò :p
ciao
No, a dire il vero si trattava di un tutorial introduttivo per l'assembly. Intendevo creare qualcosa che avvicinasse gli utenti all'assembly, ma niente di molto tecnico. Purtroppo, non essendo molto esperto, non so svilupparlo come vorrei (non conosco tutto :p). Magari ti rompo un po' via e-mail, che ne dici? :D
Te lo mando e mi fai una "revisione", con correzioni e aggiunte, dove servono.
No, a dire il vero si trattava di un tutorial introduttivo per l'assembly. Intendevo creare qualcosa che avvicinasse gli utenti all'assembly, ma niente di molto tecnico. Purtroppo, non essendo molto esperto, non so svilupparlo come vorrei (non conosco tutto :p). Magari ti rompo un po' via e-mail, che ne dici? :D
Te lo mando e mi fai una "revisione", con correzioni e aggiunte, dove servono.
ottimo, anche perché sono curioso di leggerlo ;) :)
DanieleC88
10-05-2005, 15:49
ottimo, anche perché sono curioso di leggerlo ;) :)
Allora provvedo subito! ;)
Anyway, stiamo andano un po' OT...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.