printf указывают строку целочисленного формата для плавания

Вы могли также grep строка и затем сокращать его как, например:

grep 'текстовое' имя файла | сократило-c 1-5

10
задан Greg 24 May 2013 в 10:08
поделиться

7 ответов

Он не печатает 5, потому что компилятор не знает, как автоматически преобразовать его в целое число. Вам нужно самостоятельно выполнить (int) a .

То есть,

#include<stdio.h>
void main()
{
float a=5;
printf("%d",(int)a);
}

правильно выводит 5.

Сравните эту программу с

#include<stdio.h>
void print_int(int x)
{
printf("%d\n", x);
}
void main()
{
float a=5;
print_int(a);
}

, где компилятор напрямую знает, как преобразовать значение с плавающей точкой. в int из-за объявления print_int .

13
ответ дан 3 December 2019 в 13:32
поделиться

Описатель формата% d может использоваться только со значениями типа int . Вы передаете double (которое float будет неявно преобразовано в). Результирующее поведение не определено. Нет ответа на вопрос "почему он печатает 0?" вопрос. Все что угодно можно распечатать. На самом деле все может случиться.

PS

  1. Это int main , а не void main .
  2. Нет такого заголовка, как conio.h ] в стандарте C.
13
ответ дан 3 December 2019 в 13:32
поделиться

Вам нужно использовать % f вместо % d - % d только для целых чисел, а % f - для чисел с плавающей запятой:

#include<stdio.h>
#include<conio.h>
void main()
{
  float a=5;
  printf("%f",a);
}
5
ответ дан 3 December 2019 в 13:32
поделиться

Вы должны либо привести его к типу int, чтобы использовать% d, либо использовать строку формата для отображения числа с плавающей запятой без десятичной точности:

void main() {
  float a=5;
  printf("%d",(int)a); // This casts to int, which will make this work
  printf("%.0f",a); // This displays with no decimal precision
}
5
ответ дан 3 December 2019 в 13:32
поделиться

Вы должны использовать другую строку форматирования, просто посмотрите http://www.cplusplus.com/reference/clibrary/cstdio/printf/

printf ("% f", a);

4
ответ дан 3 December 2019 в 13:32
поделиться

Вы захотите использовать% f для печати значения с плавающей запятой.

например

float a=5;
printf("%f",a);
4
ответ дан 3 December 2019 в 13:32
поделиться

Как говорили другие люди, вам нужно использовать % f в строке формата или преобразовать a в int .

Но я хочу отметить, что ваш компилятор, вероятно, знает о строке формата printf () и может сказать вам, что вы ее неправильно используете. Мой компилятор с соответствующим вызовом ( -Wall включает -Wformat ) говорит следующее:

$ /usr/bin/gcc -Wformat tmp.c
tmp.c: In function ‘main’:
tmp.c:4: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘double’

$ /usr/bin/gcc -Wall tmp.c
tmp.c: In function ‘main’:
tmp.c:4: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘double’

$

О, и еще одна вещь: вы должны включить '\ n' в printf () , чтобы гарантировать отправку вывода на устройство вывода.

printf("%d\n", a);
/*        ^^ */

или используйте fflush (stdout); после printf () .

2
ответ дан 3 December 2019 в 13:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: