ошибка: передача ‘float’ параметру несовместимого типа ‘const char *’

#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 возможно