Voglio sapere se:controllo se un sacco di int è pari
val1 = val2 = val3 ... = val6
provo questo:
if (val1 == val2 == val3 == val4 == val5 == val6)
{
}
ma non funzionano, perché?
Voglio sapere se:controllo se un sacco di int è pari
val1 = val2 = val3 ... = val6
provo questo:
if (val1 == val2 == val3 == val4 == val5 == val6)
{
}
ma non funzionano, perché?
L'operatore ==
funziona solo tra coppie di valori. Quando si esegue questa operazione:
val1 == val2 == val3
ciò che sta realmente accadendo è questo:
(val1 == val2) == val3
Quindi, se val1
e val2
sono uguali, l'espressione tra parentesi restituisce true:
true == val3
E quindi controlla se true
== val3
, non se val1
o val2
== val3
. Devi fare questo, invece:
val1 == val2 && val1 == val3
Questo sta diventando abbastanza ingombrante per i sei variabili però. Hai davvero sei variabili locali che devi confrontare? Forse dovresti archiviarli in un array di qualche tipo. Poi si può fare:
bool all_equal(int *vals, int length) {
if (length == 0) {
return true;
}
int first = vals[0];
for (int i=1; i < length; i++) {
if (vals[i] != first) {
return false;
}
}
return true;
}
Così, invece di:
int val1 = ..., val2 = ..., val3 = ..., val4 = ..., val5 = ..., val6 = ...;
if (val1 == val2 && val2 == val3 && val3 == val4 && val4 == val5 && val5 == val6) {
...
}
si farebbe:
int vals[6] = {..., ..., ..., ..., ..., ...};
if (all_equal(vals, 6)) {
...
}
Non è possibile concatenare l'operatore ==
. A questo scopo:
if (val1 == val2 && val2 == val3 && val3 == val4 && val4 == val5 && val5 == val6) {
// they are all equal
}
Vorrei suggerire a scrivere una macro o una funzione (se si tratta di array con grande dimensione o se è allocato in fase di esecuzione) in questo caso.
Il problema di errore è già abilmente spiegato da altri utenti, volevo solo condividere un altro approccio.
ho scritto un codice C con numero variabile di argomenti: 9.9. Variable numbers of arguments Spero che troverete interessante
#include<stdio.h>
#include<stdarg.h>
typedef enum {FALSE, TRUE} boolean;
boolean isAllEqual(int count, ...){
va_list ap; // vlist variable
int num = 0;
boolean flag = TRUE;
//Step2: To initialize `ap` using right-most argument that is `c`
va_start(ap, count);
//Step3: Now access vlist `ap` elements using va_arg()
num = va_arg(ap, int);
while(--count){
if (num != va_arg(ap, int)){
flag = FALSE;
break;
}
}
//Step4: Now work done, we should reset pointer to NULL
va_end(ap);
return flag? TRUE: FALSE;
}
int main(){
if(isAllEqual(5, 2, 2, 2, 2, 2))
printf(" Yes, All are equal\n");
else
printf(" No, All are NOT equal\n");
if(isAllEqual(4, 2, 4, 2, 5))
printf(" Yes, All are equal\n");
else
printf(" No, All are NOT equal\n");
return 0;
}
uscita:
Yes, All are equal
No, All are NOT equal
Controllare codepade.
La mia funzione boolean isAllEqual(int count, ...)
può controllare qualsiasi numero di numeri interi, conteggio = numero di valori che si desidera confrontare. per esempio. In isAllEqual(4, 2, 4, 2, 5)
il primo 4
indica che si desidera confrontare i quattro valori seguenti.
A short theory in four points will help you to understand my code.
Sei di sfondo Python?il confronto composito non è presente in C –