Se avete un idea di come si intende utilizzare x poi, naturalmente, si può scrivere
int x = printf("text");
In caso contrario, il valore di ritorno della funzione viene semplicemente scartato perché non viene utilizzato.
E nella maggior parte dei casi i programmatori non trovano un'applicazione utile del valore di ritorno di printf.
Tuttavia a volte può essere utilizzato ad esempio per stampare tabelle con colonne allineate.
Ad esempio
int n = printf("%s", SomeString);
if (n < COLUMN_WIDTH) printf("%*c", COLUMN_WIDTH - n, ' ');
Considerate questo semplice programma
#include <stdio.h>
int main(void)
{
const int COLUMN_WIDTH = 20;
int n = printf("%s", "Hello");
if (n < COLUMN_WIDTH) printf("%*c", COLUMN_WIDTH - n, ' ');
printf("%s", "World");
}
La sua uscita è
Hello World
Ecco un altro esempio in cui il valore restituito di printf trova un'utile applicazione.
Supponiamo che è necessario per produrre una sequenza di numeri separati da una virgola, come per esempio
1, 2, 3, 4, 5, 6, 7, 8, 9
Come uscita una tale sequenza utilizzando solo un singolo ciclo senza porre dichiarazioni di stampa di fuori del ciclo?
Ecco un programma che mostra come può essere fatto basandosi sull'uso del valore di ritorno della funzione printf. :) Provalo.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
size_t n = 0;
printf("Enter the number of elements in the array (greater than 0): ");
scanf("%zu", &n);
if (n == 0) exit(1);
int a[n];
srand((unsigned int)time(NULL));
size_t i;
for (i = 0; i < n; i++) a[ i ] = rand() % n;
i = 0;
do
{
printf("%d", a[ i ]);
} while (++i < n && printf(", ") > 0);
return 0;
}
Per quanto riguarda il programma di
int foo(int x) {
return x;
}
int main() {
foo(10);
}
quindi funzione foo
chiamante non ha alcun effetto. Non fa nulla e infatti può essere rimosso. E non tutti i compilatori pubblicano un messaggio per il tuo programma. Sembra che il compilatore che stai usando abbia un'opzione di compilazione che prevede che il compilatore consideri avvertenze come errori. Quindi il tuo compilatore vuole che tu presti attenzione al fatto che la chiamata della funzione non ha alcun effetto. È possibile che tu abbia commesso un errore logico.
D'altra parte la funzione di chiamata printf ha un effetto visibile.
Sei libero di fare lo stesso. –
E cosa faresti con quel numero? – jonrsharpe
Ho compilato il codice, non ho ricevuto alcun errore o avviso sul valore restituito non utilizzato. Che compilatore stai usando, e qual è l'errore? – Barmar