|
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. | NEI PREFERITI | .:: | RSS Forum | RSS News | NEWS web | NEWS software | |
| PUBBLICITA' | | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | | CERCA nel FORUM » | |
![]() |
#136 | ||||
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Quota:
Quota:
Quota:
Ogniuno di questi array è visibile solo all'istanza che lo ha creato Quota:
Codice:
if(argc == 1) { /*Se è vera vuol dire che questa è la prima istanza, setto campo = griglia, creo la memoria condivisa e il semaforo*/ for(i=1; i<11; i++) for(j=1; j<11; j++) griglia[i][j] = ' '; for(i=1; i<11; i++) for(j=1;j<11;j++) campo[i][j] = griglia[i][j]; //Creazione memoria condivisa mapping = CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,0,"shared_mem"); if(mapping == INVALID_HANDLE_VALUE)Errore_("Errore nella creazione della memoria condivisa"); //Creazione semaforo sem = CreateSemaphore(NULL,1,1,"semaforo"); if(sem == INVALID_HANDLE_VALUE)Errore_("Errore nella creazione del semaforo"); } else { //Altrimenti è la seconda e setto campo = griglia2, il semaforo già esiste for(i=1; i<11; i++) for(j=1; j<11; j++) griglia2[i][j] = ' '; for(i=1; i<11; i++) for(j=1;j<11;j++) campo[i][j] = griglia2[i][j]; } |
||||
![]() |
![]() |
![]() |
#137 | |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Quota:
Codice:
for(i=1; i<11; i++) for(j=1;j<11;j++) campo[i][j] = ' '; |
|
![]() |
![]() |
![]() |
#138 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
![]() ![]() ![]() |
Sono distinti.
Perchè non fai una prova ? Lascia perdere per un attimo quello che stai facendo. Fai un programmino con un array. Poi riempi l'array tramite un input Infine visualizzi il valore degli elementi dell'array. Inserisci valori diversi per le due istanze. Vedrai che sebbene l'array è chiamato con lo stesso nome, i valori sono diversi. |
![]() |
![]() |
![]() |
#139 | |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Quota:
![]() |
|
![]() |
![]() |
![]() |
#140 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Ho provato a lanciare il programma della battaglia navale lasciando nel main solo queste istruzioni:
Codice:
int main(int argc, char*argv[]) { //Inizializzazione della griglia di gioco for(i=1; i<11; i++) for(j=1; j<11; j++) cArray[i][j] = ' '; AggiornaCampo(); } Dov'è l'errore? EDIT: forse è una maledizione, ma penso alla soluzione di un problema e non mi viene, mi arrendo, posto il problema e trovo la soluzione ![]() è bastata questa modifica AggiornaCampo(char cArray[10][10]); ---> AggiornaCampo(char bArray[10][10]); Ultima modifica di Alhazred : 09-07-2004 alle ore 22.17.03 |
![]() |
![]() |
![]() |
#141 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Codice:
void PosizionaNavi(){ int num = 1; int iraw = 0; char raw; char col; ClearScreen(); printf("Inserire le coordinate per %u navi.\n",numeroNavi); printf("\n"); for(num=1;num<numeroNavi+1;num++){ printf("Restano da posizionare %u navi\n", numeroNavi+1-num); printf("Inserisci la colonna per la nave %u: ",num); gets(col); printf("\n"); printf("Inserisci la riga per la nave %u: ",num); gets(raw); printf("\n"); iraw = raw - 48; mArray[num].colonna = col; mArray[num].riga = iraw; } } Funziona, ma compilando mi da questi warning: warning C4047: 'function' : 'char *' differs in levels of indirection from 'char ' warning C4024: 'gets' : different types for formal and actual parameter 1 warning C4047: 'function' : 'char *' differs in levels of indirection from 'char ' warning C4024: 'gets' : different types for formal and actual parameter 1 E' chiaro che ho sbagliato l'uso di gets(), mi dite come va usato? |
![]() |
![]() |
![]() |
#142 |
Senior Member
Registrato: 04-07-2004
Loc.: là sui monti con Annette...
Messaggi: 380
![]() |
gets() acquisisce una stringa...quindi o dichiari col come una stringa
o usi un altra funzione per acquisire un singolo carattere ad esempio getchar()
___________________________________
...sempre allegri bisogna stare il nostro piangere fa male al re... ![]() |
![]() |
![]() |
![]() |
#143 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Codice:
typedef struct { int riga; char colonna; } t_Mossa; char *mArray[numeroNavi]; ... void PosizionaNavi(){ int num = 1; //decrementa l'output per il numero di navi da posizionare int raw = 0; //indice di riga int colo = 1; // indice di colonna char ccolo = ' '; char craw = ' '; char *coor = ""; ClearScreen(); printf("Inserire le coordinate per %u navi.\n",numeroNavi); printf("\n"); for(num=1;num<numeroNavi+1;num++){ printf("Navi da posizionare: %u\n", numeroNavi+1-num); printf("Inserisci le coordinate per la nave %u: ",num); printf("Ha acquisito la coordinata\n"); gets(coor); printf("ha fatto il gets\n"); ccolo = *coor; printf("Ha assegnato ccolo\n"); colo = ccolo - 64; printf("Ha convertito ccolo in int\n"); craw = *(coor + 1); printf("Ha assegnato craw\n"); raw = craw - 48; printf("Ha convertito craw in int\n"); printf("\n"); mArray[num] = coor; cArray[colo][raw] = 'x'; //da togliere quando funziona } } Ho messo una printf dopo ogni istruzione in modo da vedere a che punto si blocca. In output accade questo Inserisci le coordinate per la nave 1: Ha acquisito la coordinata in pratica prende un ritorno a capo precedente e lo considera come coordinata, poi si blocca. Come si può ovviare a questo problema? Ultima modifica di Alhazred : 10-07-2004 alle ore 12.20.27 |
![]() |
![]() |
![]() |
#144 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
![]() ![]() ![]() |
Che prolemi sti char vs string
![]() 1) Provare: Codice:
#include <conio.h> main(void){ char c; gets(c); printf("%c",*c); } Codice:
#include <conio.h> main(void){ char *c; gets(c); printf("%c",*c); } Codice:
#include <conio.h> main(void){ char c[10]; gets(c); printf("%s",c); } Codice:
#include <conio.h> main(void){ char c; c=getch(); printf("%c",c); } |
![]() |
![]() |
![]() |
#145 | |||
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Quota:
warning C4013: 'printf' undefined; assuming extern returning int error C2100: illegal indirection L'errore dovrebbe essere dovuto al fatto che c è un char e non un puntatore a carattere. (modifica: c deve essere un buffer, ci sono arrivato dopo aver visto il terzo esempio) [quote] 2) Provare: Codice:
#include <conio.h> main(void){ char *c; gets(c); printf("%c",*c); } warning C4013: 'printf' undefined; assuming extern returning int warning C4700: local variable 'c' used without having been initialized Questo da lo stesso mio problema, va a scrivere dove non dovrebbe. Quota:
warning C4013: 'printf' undefined; assuming extern returning int Questo funziona, c è diventato un buffer dove scrivere (l'ho provato nel mio programma e adesso va, dovendo essere la coordinata di 2 caratteri ho messo char coor[2]; giusto?) Quota:
Questo se ho capito bene legge il tasto premuto e lo manda in output con la printf in modo che venga scritto solo 1 volta. |
|||
![]() |
![]() |
![]() |
#146 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Codice:
void PosizionaNavi(){ int num = 1; //decrementa l'output per il numero di navi da posizionare int i_raw = 0; //indice di riga int i_colo = 1; // indice di colonna int in_col = 0; //incrementa la posizione di *coor per leggere la colonna int in_raw = 0; //incrementa la posizione di *coor per leggere la riga char c_colo = ' '; char c_raw = ' '; char coor[10]; ClearScreen(); printf("Inserire le coordinate per %u navi.\n",numeroNavi); printf("\n"); for(num=1;num<numeroNavi+1;num++){ printf("Navi da posizionare: %u\n", numeroNavi+1-num); printf("Inserisci le coordinate per la nave %u: ",num); gets(coor); c_colo = *coor; while(c_colo == ' '){ //cerca il primo carattere diverso da blank c_colo = *coor+in_col; in_col++; } printf("--%s--",&c_colo); //riga per debug i_colo = c_colo - 64; in_raw=in_col; c_raw = *(coor+in_raw + 1); while(c_raw == ' '){ //cerca il secondo carattere diverso da blank in_raw++; c_raw = *coor+in_raw; } printf("--%s--",&c_raw); //riga per debug i_raw = c_raw - 48; printf("\n"); mArray[num] = coor; cArray[i_raw][i_colo] = 'x'; //riga per debug } } Ho pensato di ovviare al problema con i 2 while, ma non accade ciò che avevo in mente (ovvero: finché non trovi un carattere diverso da blank va sul successivo). Altro problema è che se ad esempio do come coordinata E10, questa viene letta com e E1. Consigli/soluzioni? |
![]() |
![]() |
![]() |
#147 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
Miii ragà .. arf ... arf....
![]() ![]() Tutti gli errori: "nome funzione" undefined; assuming extern returning int... sono dovuti al fatto che non è stato incluso nel file l'header con il prototipo della funzione di libreria utilizzata .. e quindi il compilatore pensa (per nostra fortuna) che la funzione sia "extern", il che è vero .. e che ritorni un "int" .. il che purtroppo non è sempre vero, ma nel caso della printf .. può andare... Bye ![]() |
![]() |
![]() |
![]() |
#148 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
Perché usi così tanto i puntatori?....
Bye ![]() |
![]() |
![]() |
![]() |
#149 | |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Quota:
|
|
![]() |
![]() |
![]() |
#150 | |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
Quota:
però bisogna stare attenti.. altrimenti potresti ritrovarti in alcuni casi a perdere molto tempo a risolvere i problemi che essi stessi creano.. e talvolta scoprire che bastava usare una variabile in più .. oppure una sola riga diversa di codice... .. ti propongo un'implementazione nel prossimo post... Bye ![]() |
|
![]() |
![]() |
![]() |
Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti) | |
Strumenti discussione | |
|
|
![]() |
||||
Discussione | Autore discussione | Forum | Risposte | Ultimo messaggio |
La grande battaglia dei super eroi! | Sbavi | Chiacchiere in libertà | 83 | 27-02-2009 11.43.39 |
battaglia navale in c# | Joy&Lu | Programmazione | 3 | 01-09-2008 16.08.58 |
Il Signore degli Anelli - La Battaglia per la terra di mezzo | Darth Maul | Masterizzazione Giochi Games | 0 | 01-09-2006 19.16.18 |
[C] Battaglia Navale (versione client server) in Linux | Nanri | Programmazione | 11 | 06-08-2005 15.50.27 |