Как печатать на С - PullRequest
       9

Как печатать на С

19 голосов
/ 29 января 2010

Очень новичок в c, на самом деле это моя первая программа для тестирования.

Я не могу понять, как распечатать этот номер на терминале.

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

Я уверен, что в java я мог бы просто заменить printf на system.out, и это сработало бы. Я пытался найти ответ ранее, но если вы не знаете, что искать, трудно найти ответ.

Ответы [ 3 ]

37 голосов
/ 29 января 2010

попробуйте это:

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

Вот документация для printf .

19 голосов
/ 29 января 2010

Первый аргумент printf() всегда является строковым значением, известным как строка управления форматом. Эта строка может быть обычным текстом, например

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

или

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

Эта строка также может содержать один или несколько спецификаторов преобразования ; эти спецификаторы преобразования указывают, что дополнительные аргументы были переданы printf(), и они определяют, как форматировать эти аргументы для вывода. Например, я могу изменить вышеупомянутое значение на

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

Спецификатор преобразования "% s" ожидает указатель на строку с нулем в конце и форматирует ее как текст.

Для вывода со знаком десятичного целого числа используйте спецификаторы преобразования «% d» или «% i», например

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

Вы можете смешивать обычный текст со спецификаторами преобразования, например:

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

Обратите внимание, что спецификаторы преобразования в строке управления указывают число и типы дополнительных параметров. Если число или типы дополнительных аргументов, переданных в printf(), не соответствуют спецификаторам преобразования в строке формата, тогда поведение не определено. Например:

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

приведет к чему-либо от искаженного вывода до прямого сбоя.

Существует ряд дополнительных флагов для спецификаторов преобразования, которые управляют шириной, точностью, заполнением, выравниванием и типами полей. Проверьте ваше удобное справочное руководство C для полного списка.

0 голосов
/ 29 января 2010

printf немного сложнее, чем это. Вы должны предоставить строку формата, а затем переменные для применения к строке формата. Если вы просто предоставите одну переменную, C примет это за форматную строку и попытается распечатать все байты, которые в ней найдены, пока не достигнет завершающего nul (0x0).

Так что, если вы просто дадите ему целое число, оно будет весело перемещаться по памяти в том месте, где хранится ваше целое число, сбрасывая на экран весь мусор, пока не встретит байт с 0.

Для программиста на Java, я думаю, это довольно грубое введение в отсутствие проверки типов в Си. Поверьте мне, это только верхушка айсберга. Вот почему, хотя я приветствую ваше желание расширить свой кругозор, изучая C, я настоятельно рекомендую вам сделать все возможное, чтобы избежать написания в нем реальных программ.

(Это касается и всех, кто читает это тоже.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...