«Как передать логическое условие в функцию?»
Проблема в этом случае состоит в том, что это не только логическое условие . Заданное выражение , которое дает логическое значение, необходимо проверять внутри функции после каждой итерации.
Вы не можете передавать не оцененные выражения в функцию.
Если логические выражения являются константными и ограничиваются только тремя, указанными в примере, и вы явно хотите использовать выражение в вызове функции (для удобства чтения), вы можете использовать строковый литерал и сравнивать строковый литерал внутри функции как альтернатива вместо. Обратите внимание, что вам нужно заключить выражение в ""
, например "exp"
в этом случае:
#include <stdio.h>
#include <string.h>
void print_hi(int, const char const *);
int main(void)
{
print_hi(3, "val < 10");
print_hi(12, "val % 8 != 0");
print_hi(25, "val <= 38");
return 0;
}
void print_hi(int val, const char const * str)
{
int exp = 0;
if(strcmp(str, "val < 10") == 0);
{
exp = 1;
}
else if(strcmp(str, "val % 8 != 0") == 0);
{
exp = 2;
}
else if(strcmp(str, "val <= 38") == 0)
{
exp = 3;
}
else
return;
switch(exp)
{
case 1:
while (val < 10)
{
printf("Hi!");
val++;
}
break;
case 2:
while (val % 8 != 0)
{
printf("Hi!");
val++;
}
break;
case 3:
while (val <= 38) {
printf("Hi!");
val++;
}
break;
default:
break;
}
return;
}
Или вы также можете просто использовать значение для него в качестве альтернативы, и внутри функции определите путь на основании этого значения:
#include <stdio.h>
void print_hi(int, unsigned short int);
int main(void)
{
print_hi(3,1);
print_hi(12,2);
print_hi(25,3);
return 0;
}
void print_hi(int val, unsigned short int exp)
{
switch(exp)
{
case 1:
while (val < 10)
{
printf("Hi!");
val++;
}
break;
case 2:
while (val % 8 != 0)
{
printf("Hi!");
val++;
}
break;
case 3:
while (val <= 38) {
printf("Hi!");
val++;
}
break;
default:
break;
}
return;
}