2010-01-29 24 views
13

Muy principiante para c, de hecho este es mi primer programa de prueba.Cómo imprimir en C

No puedo averiguar cómo imprimir este número en la terminal.

#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; 
} 

Estoy seguro de que en java podría simplemente reemplazar el printf con system.out y hubiera funcionado. Intenté buscar la respuesta antes, pero si no sabes qué buscar, es difícil encontrar una respuesta.

+1

le pueden resultar muy útiles http://www.cppreference.com/wiki/, consulte la sección de la biblioteca estándar de C. –

Respuesta

31

probar esto:

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

Aquí está la documentation for printf.

+7

Es posible que desee agregar una nueva línea o 'fflush (stdout)'. –

17

El primer argumento para printf() es siempre un valor de cadena, conocido como cadena de control de formato. Esta cadena puede ser texto regular, como

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

o

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

Esta cadena también puede contener uno o más especificadores de conversión; estos especificadores de conversión indican que se han pasado argumentos adicionales al printf(), y especifican cómo formatear esos argumentos para el resultado. Por ejemplo, puedo cambiar lo anterior a

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

El "% s" indicador de conversión espera un puntero a una cadena terminada en 0, y formatos como texto.

Para la salida de número entero decimal firmado, utilice el "% d" o "% i" especificadores de conversión, tales como

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

Usted puede mezclar texto regular con especificadores de conversión, así:

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

Tenga en cuenta que los especificadores de conversión en la cadena de control indican número y tipos de parámetros adicionales. Si el número o los tipos de argumentos adicionales pasados ​​a printf() no coinciden con los especificadores de conversión en la cadena de formato, entonces el comportamiento no está definido. Por ejemplo:

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

resultará en cualquier cosa, desde una salida distorsionada a un bloqueo total.

Existen varios indicadores adicionales para los especificadores de conversión que controlan el ancho, la precisión, el relleno, la justificación y los tipos del campo. Consulte su práctico manual de referencia C para obtener una lista completa.

+2

No puedo en buena conciencia enviar una respuesta que sugiere printf (). ¿No hemos aprendido a especificar siempre explícitamente la cadena de formato? Me gusta el resto de la respuesta, sin embargo. –

+0

@AndrewColeson No entiendo de qué estás hablando. Esta respuesta utiliza el formato '" Hello, world \ n "', que no contiene sustituciones, y otros. El formato es "Siempre explícitamente especificado". –

+1

@PascalCuoq él está hablando de 'printf (saludo)' que es inofensivo en este ejemplo, pero todavía me hace temblar un poco (y presumiblemente a otros). – Cubic

0

printf es un poco más complicado que eso. Debe proporcionar una cadena de formato y luego las variables para aplicar a la cadena de formato. Si solo proporciona una variable, C asumirá que es la cadena de formato e intentará imprimir todos los bytes que encuentre en ella hasta que llegue a una nul de terminación (0x0).

Así que si sólo se da un número entero, se marchará alegremente por la memoria en el lugar de su número entero se almacena, el vertido de basura lo hay para la pantalla, hasta que sucede a venir a través de un byte que contiene 0.

Para un programador de Java, me imagino que esta es una introducción bastante grosera a la falta de comprobación de tipos de C. Créanme, esto es solo la punta del iceberg. Esta es la razón por la cual, mientras aplaudo su deseo de expandir sus horizontes aprendiendo C, le sugiero encarecidamente que haga lo que pueda para evitar escribir programas reales en él.

(esto va para todos los demás leyendo esto también.)