#c #cs50
#c #cs50
Вопрос:
Я работаю над жадным алгоритмом, в котором я получаю ошибку при преобразовании float в int
#include <cs50.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
float n;
//checking if given input is valid or not
do
{
n = get_float();
}
while(n<0);
//converting dollar into cents
float coins = n * 100;
int x = atoi(coins) //getting error here???
....
}
Комментарии:
1. В качестве общего принципа, в подавляющем большинстве программ на C, вы действительно хотите использовать
double
вместоfloat
. Но это не имеет отношения к вашей ошибке.
Ответ №1:
atoi
Функция используется для преобразования строки в целое число. В качестве аргумента ожидается char *
, который указывает на строку.
Здесь вам не нужна функция преобразования. Вы можете присвоить float
значение непосредственно int
, и любая дробная часть будет усечена.
int x = coins;
Однако обратите внимание, что это может вызвать неопределенное поведение, если усеченное значение coins
находится за пределами диапазона int
.
Комментарии:
1. В этом ответе действительно может потребоваться дополнительное примечание о том, что это потенциально может быть UB, если
coins
значение не подходитint
.
Ответ №2:
atoi()
преобразует ascii в целое число, а a float
не является int
. Проверьте определение функции в заголовочном файле. Я предлагаю использовать atof()
вместо этого, или, возможно strtod()
.
Комментарии:
1. В контексте программа вообще не хочет преобразовывать строку в число, поэтому ни одна из этих функций не имеет значения. Он хочет преобразовать a
float
вint
, поэтому достаточно простого присваивания или приведения.2. @NateEldredge присваивание проверьте, может ли значение быть представлено
int
возможно