Вы могли также grep строка и затем сокращать его как, например:
grep 'текстовое' имя файла | сократило-c 1-5
Он не печатает 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
.
Описатель формата% d
может использоваться только со значениями типа int
. Вы передаете double
(которое float
будет неявно преобразовано в). Результирующее поведение не определено. Нет ответа на вопрос "почему он печатает 0?" вопрос. Все что угодно можно распечатать. На самом деле все может случиться.
PS
int main
, а не void main
. conio.h
] в стандарте C. Вам нужно использовать % f
вместо % d
- % d
только для целых чисел, а % f
- для чисел с плавающей запятой:
#include<stdio.h>
#include<conio.h>
void main()
{
float a=5;
printf("%f",a);
}
Вы должны либо привести его к типу 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
}
Вы должны использовать другую строку форматирования, просто посмотрите http://www.cplusplus.com/reference/clibrary/cstdio/printf/
printf ("% f", a);
Вы захотите использовать% f для печати значения с плавающей запятой.
например
float a=5;
printf("%f",a);
Как говорили другие люди, вам нужно использовать % 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 ()
.