Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

problema con comparazione di 2 stringhe in c (strcmp )

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] problema con comparazione di 2 stringhe in c (strcmp )

Messaggioda Foto Utentemattia281193 » 25 ago 2012, 19:56

Codice: Seleziona tutto
char uart_rd;
int res;
char txt[]= "a";
void main() {
  TRISB=0;
  UART1_Init(9600);
  Delay_ms(100);
  PORTB=0x01;
  Delay_ms(100);
  PORTB=0x00;


  while (1) {
    if (UART1_Data_Ready()) {
      uart_rd = UART1_Read();
      res = strcmp( uart_rd,txt);
      if (res==0) {
      portb=0x01;
    }
    else  {
    portb=0x00 ;
    }
  }
}
}

sto utilizzando un PIC 16f876a a 8 MHz , come compilatore MicroC Pro .
il programma viene compilato ma non si attiva la portb.0 .
ho letto che "res" è zero se sono uguali ma può essere sia maggiore che minore di 0 nel caso siano diverse , io l'ho considerata come fosse booleana e ho utilizzato una condizione if , ma penso che sia li la fregatura .
Io scrivo su mando da hyperterminal un file txt contenente solo "a" (senza le virgolette) tramite lo shield USB per xbee lo trasmetto via onde radio e un altro modulo xbee riceve e trasmette al PIC la stringa.
Lo xbee ricevente riceve il segnale, infatti si accende un led verde per indicare che sta in comunicazione .
Avatar utente
Foto Utentemattia281193
26 4
Frequentatore
Frequentatore
 
Messaggi: 132
Iscritto il: 1 ott 2011, 13:38

1
voti

[2] Re: problema con comparazione di 2 stringhe in c (strcmp )

Messaggioda Foto UtenteDirtyDeeds » 25 ago 2012, 20:04

La strcmp vuole che le stringhe siano terminate dal carattere nullo '\0': uart_rd non lo è.
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,9k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7012
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

0
voti

[3] Re: problema con comparazione di 2 stringhe in c (strcmp )

Messaggioda Foto Utentemattia281193 » 25 ago 2012, 20:10

DirtyDeeds ha scritto:La strcmp vuole che le stringhe siano terminate dal carattere nullo '\0': uart_rd non lo è.

Codice: Seleziona tutto
char txt[]= "a\0'";

cosi per esempio?
Avatar utente
Foto Utentemattia281193
26 4
Frequentatore
Frequentatore
 
Messaggi: 132
Iscritto il: 1 ott 2011, 13:38

0
voti

[4] Re: problema con comparazione di 2 stringhe in c (strcmp )

Messaggioda Foto Utentemattia281193 » 25 ago 2012, 20:19

ah scusa uart_rd deve essere terminato scusa ancora :mrgreen:
Avatar utente
Foto Utentemattia281193
26 4
Frequentatore
Frequentatore
 
Messaggi: 132
Iscritto il: 1 ott 2011, 13:38

3
voti

[5] Re: problema con comparazione di 2 stringhe in c (strcmp )

Messaggioda Foto UtenteDirtyDeeds » 25 ago 2012, 20:20

mattia281193 ha scritto:
Codice: Seleziona tutto
char txt[]= "a\0'";

cosi per esempio?


No, decisamente no.

txt è una stringa, uart_rd è un carattere. Tra l'altro, perché vuoi usare la funzione di comparazione tra stringhe quando devi solo comparare un carattere?
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,9k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7012
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

0
voti

[6] Re: problema con comparazione di 2 stringhe in c (strcmp )

Messaggioda Foto Utentemattia281193 » 25 ago 2012, 20:39

errata
Ultima modifica di Foto Utentemattia281193 il 25 ago 2012, 20:43, modificato 1 volta in totale.
Avatar utente
Foto Utentemattia281193
26 4
Frequentatore
Frequentatore
 
Messaggi: 132
Iscritto il: 1 ott 2011, 13:38

0
voti

[7] Re: problema con comparazione di 2 stringhe in c (strcmp )

Messaggioda Foto Utentemattia281193 » 25 ago 2012, 20:42

ah è vero una volta letto uart_rd è un carattere come posso comparare una char e una stringa?devo riconvertire uart_rd in stringa e utilizzare strcmp giusto?
Avatar utente
Foto Utentemattia281193
26 4
Frequentatore
Frequentatore
 
Messaggi: 132
Iscritto il: 1 ott 2011, 13:38

3
voti

[8] Re: problema con comparazione di 2 stringhe in c (strcmp )

Messaggioda Foto UtenteCandy » 25 ago 2012, 21:09

Un carattere ed una stringa non sono comparabili, a meno che la stringa non contenga un unico carattere; che equivale a comparare un carattere:
Codice: Seleziona tutto
char a, b;
bool r;

a = '1';
b = '2';

a == b ? r = TRUE : r = FALSE; // r = FALSE
a == '1' ? r = TRUE : r = FALSE; // r = TRUE
b == '2' ? r = TRUE : r = FALSE; // r = TRUE
a = '2';
a == b ? r = TRUE : r = FALSE; // r = TRUE


Avatar utente
Foto UtenteCandy
32,5k 7 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 10123
Iscritto il: 14 giu 2010, 22:54

0
voti

[9] Re: problema con comparazione di 2 stringhe in c (strcmp )

Messaggioda Foto Utentemattia281193 » 25 ago 2012, 21:21

Codice: Seleziona tutto
char uart_rd;
char txt[]= "a";
void main() {
  TRISB=0;
  UART1_Init(9600);
  Delay_ms(100);
  PORTB=0x01;
  Delay_ms(100);
  PORTB=0x00;


  while (1) {
    if (UART1_Data_Ready()) {
      uart_rd = UART1_Read();
      if (uart_rd==0x61) {
      portb=0x01;
    }
    else  {
    portb=0x00 ;
    }
  }
}
}

:lol: :lol: :lol: :lol: :lol: sono stato depistato dalla strcmp bastava questo ! :mrgreen: :mrgreen: grazie per le risposte e per la pazienza O_/
Avatar utente
Foto Utentemattia281193
26 4
Frequentatore
Frequentatore
 
Messaggi: 132
Iscritto il: 1 ott 2011, 13:38

2
voti

[10] Re: problema con comparazione di 2 stringhe in c (strcmp )

Messaggioda Foto Utenterusty » 25 ago 2012, 21:47

Si ma a questo punto non ha piu' senso definire la variabile txt visto che non la usi, a meno che non scrivi:

Codice: Seleziona tutto
char txt= 'a';
...
   if (uart_rd==txt) {
      portb=0x01;
    }
...
Avatar utente
Foto Utenterusty
4.075 2 9 11
Utente disattivato per decisione dell'amministrazione proprietaria del sito
 
Messaggi: 1578
Iscritto il: 25 gen 2009, 13:10

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti