2010-01-29 18 views
13

Molto principiante a c, in effetti questo è il mio primo programma di test.Come stampare in C

Non riesco a capire come stampare questo numero sul terminale.

#include <stdio.h> 

int addNumbers(int a, int b) 
{ 
    int sum = a + b; 
    return sum; 
} 

int main(void) 
{ 
    int a = 4; 
    int b = 7; 

    printf(addNumbers(a,b)); 
    return 0; 
} 

Sono sicuro che in java potrei semplicemente sostituire il printf con system.out e avrebbe funzionato. Ho provato a cercare la risposta in precedenza ma se non sai cosa cercare è difficile trovare una risposta.

+1

Si può trovare http://www.cppreference.com/wiki/ molto utile, vedere la sezione sulla libreria C standard. –

risposta

31

provare questo:

printf("%d", addNumber(a,b)) 

Ecco il documentation for printf.

+7

Potrebbe voler aggiungere una nuova riga o 'fflush (stdout)'. –

17

Il primo argomento a printf() è sempre un valore stringa, noto come stringa di controllo formato. Questa stringa può essere testo normale, ad esempio

printf("Hello, World\n"); // \n indicates a newline character 

o

char greeting[] = "Hello, World\n"; 
printf(greeting); 

questa stringa può anche contenere uno o più specificatori di conversione; questi specificatori di conversione indicano che sono stati passati ulteriori argomenti a printf() e specificano come formattare tali argomenti per l'output. Ad esempio, è possibile modificare l'alto per

char greeting[] = "Hello, World"; 
printf("%s\n", greeting); 

Il "% s" indicatore di conversione previsto un puntatore a una stringa di 0-terminati, e formati come testo.

Per firmato uscita intero decimale, utilizzare la "% d" o "% i" indicatori di conversione, come ad esempio

printf("%d\n", addNumber(a,b)); 

Potete mescolare testo normale con gli indicatori di conversione, in questo modo:

printf("The result of addNumber(%d, %d) is %d\n", a, b, addNumber(a,b)); 

Si noti che gli specificatori di conversione nella stringa di controllo indicano il numero e tipi di parametri aggiuntivi. Se il numero oi tipi di argomenti aggiuntivi passati a printf() non corrispondono agli specificatori di conversione nella stringa di formato, il comportamento non è definito. Ad esempio:

printf("The result of addNumber(%d, %d) is %d\n", addNumber(a,b)); 

si tradurrà in qualcosa, da un output confuso a un arresto anomalo.

Esistono numerosi indicatori aggiuntivi per gli specificatori di conversione che controllano larghezza, precisione, spaziatura, giustificazione e tipi del campo. Controlla il tuo pratico manuale di riferimento C per un elenco completo.

+2

Non riesco in buona fede a sollevare una risposta che suggerisce printf (). Non abbiamo ancora imparato a specificare in modo esplicito la stringa di formato? Mi piace il resto della risposta, però. –

+0

@AndrewColeson Non vedo di cosa stai parlando. Questa risposta usa il formato '" Hello, world \ n "', che non contiene alcuna sostituzione, e altri. Il formato è "Sempre esplicitamente specificato". –

+1

@PascalCuoq sta parlando di 'printf (greeting)' che è innocuo in questo esempio, ma comunque mi fa rabbrividire un po '(e presumibilmente altri). – Cubic

0

printf è un po 'più complicato di così. Devi fornire una stringa di formato e quindi le variabili da applicare alla stringa di formato. Se si fornisce solo una variabile, C assumerà che è la stringa di formato e tenta di stampare tutti i byte che trova in essa fino a quando non raggiunge un nul di terminazione (0x0).

Quindi, se solo gli date un numero intero, sarà allegramente marciare attraverso la memoria nella posizione vostro intero è memorizzato, lo scarico e tutto ciò che spazzatura è lì per lo schermo, fino a quando non capita di imbattersi in un byte contenente 0.

Per un programmatore Java, immagino che questa sia un'introduzione piuttosto scortese alla mancanza di controllo dei tipi da parte di C. Credimi, questa è solo la punta dell'iceberg. Questo è il motivo per cui, mentre apprezzo il tuo desiderio di espandere i tuoi orizzonti apprendendo C, ti consiglio caldamente di fare tutto il possibile per evitare di scrivere programmi reali in esso.

(questo vale per tutti gli altri la lettura di questo.)

Problemi correlati