¿Podemos llamar a una función dentro de printf ()?

printf("%d",func(i)); 

¿Es esto posible en C?

Pensemos que func(i) es una función separada, ¿podemos llamarla dentro de printf o scanf ?

Sí. Aunque es bastante especial en algunos aspectos, printf es solo otra función. Y una llamada a la función puede ser parte de una expresión. Y los argumentos que pasas a las funciones son en sí mismos expresiones.

Una expresión es cualquier cosa que puedas calcular. Asi que

 i + 1 

es una expresion. Pero simplemente claro

 i 

También es una expresión (más simple). Y simplemente claro

 1 

Es una expresión aún más simple.

Construimos grandes expresiones de las más pequeñas. Entonces, si expr1 es una expresión y expr2 es otra expresión, entonces

 expr1 + expr2 

Es una expresión más grande que los combina.

Al igual que puede tomar dos pequeñas expresiones (a veces las llamamos “subexpresiones”) y combinarlas para formar una expresión más grande con el operador + , también podemos tomar algunas expresiones y combinarlas llamando a una función:

 f(expr1, expr2) 

Ahora, volviendo a tu pregunta, la llamada.

 func(i) 

es una expresion. Pero cuando llama a printf , lo que espera ver para los argumentos es

 printf(expression, expression, expression, ...) 

Ahora, en printf's caso printf's , esa primera expresión debe ser una cadena, y es casi siempre una cadena constante. Pero los argumentos restantes pueden ser cualquier cosa: 1 , i , i + 1 , func(1) o casi cualquier cosa:

 printf("%d %d %d %d %d\n", 1, i, i+1, func(i), i+1+func(i)); 

La única cosa de la que preocuparse, por supuesto, es que tiene tantas expresiones como argumentos adicionales como signos de % en el primer argumento (es decir, en la cadena de formato), y los tipos de esos argumentos adicionales deben coincidir con los tipos esperado por los especificadores de formato particulares que ha utilizado ( %d , %f , %s , etc.).

 #include int sum(int ,int ); void main() { int num1,num2; printf("Enter two numbers: "); scanf("%d %d",&num1,&num2); printf("Sum of %d and %d is: %d",num1,num2,sum(num1,num2)); //function call in print statement } int sum(int num1,int num2) //function to add two numbers`` { int result; result=num1+num2; return result; }