Pagina 1 di 2

problema con comparazione di 2 stringhe in c (strcmp )

MessaggioInviato: 25 ago 2012, 19:56
da mattia281193
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 .

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

MessaggioInviato: 25 ago 2012, 20:04
da DirtyDeeds
La strcmp vuole che le stringhe siano terminate dal carattere nullo '\0': uart_rd non lo è.

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

MessaggioInviato: 25 ago 2012, 20:10
da mattia281193
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?

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

MessaggioInviato: 25 ago 2012, 20:19
da mattia281193
ah scusa uart_rd deve essere terminato scusa ancora :mrgreen:

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

MessaggioInviato: 25 ago 2012, 20:20
da DirtyDeeds
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?

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

MessaggioInviato: 25 ago 2012, 20:39
da mattia281193
errata

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

MessaggioInviato: 25 ago 2012, 20:42
da mattia281193
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?

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

MessaggioInviato: 25 ago 2012, 21:09
da Candy
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



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

MessaggioInviato: 25 ago 2012, 21:21
da mattia281193
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_/

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

MessaggioInviato: 25 ago 2012, 21:47
da rusty
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;
    }
...