Важная информация
Показано с 1 по 3 из 3

Тема: Помогите с си прогой

  1. #1 Помогите с си прогой 
    Новичок
    Регистрация
    25.09.2015
    Сообщений
    1
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    О боги,помогите днищекодеру с си прогой
    Код c:
    #include <math.h>
    #include <stdio.h>
    #include <locale.h>
     main() {
    	[Ссылки могут видеть только зарегистрированные пользователи. ](LC_ALL, "russian");
    	float sp, h ,  k, z;
    	float a1, a2, b1, b2;
    	[Ссылки могут видеть только зарегистрированные пользователи. ]("%f%f%f%f", a1, a2, b1, b2);
    	sp = a1*b1 + a2*b2;//Сколярное произведение
    	h = [Ссылки могут видеть только зарегистрированные пользователи. ](a1*a1 + a2*a2) * [Ссылки могут видеть только зарегистрированные пользователи. ](b1*b1 + b2*b2);//Произведение модулей векторов
    	k = sp / h;//Угол между векторами в радианах
    	z = (k * 180) / 3.14;//Угол между векторами в градусах
    	[Ссылки могут видеть только зарегистрированные пользователи. ]("Угол между векторами в радианах = %.2f \n", k);
    	[Ссылки могут видеть только зарегистрированные пользователи. ]("Угол между векторами в градусах = %.2f \n", z);
    	[Ссылки могут видеть только зарегистрированные пользователи. ]();
    	[Ссылки могут видеть только зарегистрированные пользователи. ]();
    }
    Не дает ввести значение для переменных .Выдает ошибки
    -------- Начата сборка "Изменить и продолжить" --------

    Source.cpp
    c:\users\w\documents\visual studio 2015\projects\consoleapplication1\consoleapplication1\source.cpp(10): warning C4244: =: преобразование "double" в "float", возможна потеря данных
    c:\users\w\documents\visual studio 2015\projects\consoleapplication1\consoleapplication1\source.cpp(12): warning C4244: =: преобразование "double" в "float", возможна потеря данных
    c:\users\w\documents\visual studio 2015\projects\consoleapplication1\consoleapplication1\source.cpp(8): warning C4477: 'scanf' : format string '%f' requires an argument of type 'float *', but variadic argument 1 has type 'double'
    c:\users\w\documents\visual studio 2015\projects\consoleapplication1\consoleapplication1\source.cpp(8): warning C4477: 'scanf' : format string '%f' requires an argument of type 'float *', but variadic argument 2 has type 'double'
    c:\users\w\documents\visual studio 2015\projects\consoleapplication1\consoleapplication1\source.cpp(8): warning C4477: 'scanf' : format string '%f' requires an argument of type 'float *', but variadic argument 3 has type 'double'
    c:\users\w\documents\visual studio 2015\projects\consoleapplication1\consoleapplication1\source.cpp(8): warning C4477: 'scanf' : format string '%f' requires an argument of type 'float *', but variadic argument 4 has type 'double'
    c:\users\w\documents\visual studio 2015\projects\consoleapplication1\consoleapplication1\source.cpp(8): warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    c:\program files\windows kits\10\include\10.0.10150.0\ucrt\stdio.h(1270): note: см. объявление "scanf"
    c:\users\w\documents\visual studio 2015\projects\consoleapplication1\consoleapplication1\source.cpp(8) : warning C4700: использована неинициализированная локальная переменная "b2"
    c:\users\w\documents\visual studio 2015\projects\consoleapplication1\consoleapplication1\source.cpp(8) : warning C4700: использована неинициализированная локальная переменная "b1"
    c:\users\w\documents\visual studio 2015\projects\consoleapplication1\consoleapplication1\source.cpp(8) : warning C4700: использована неинициализированная локальная переменная "a2"
    c:\users\w\documents\visual studio 2015\projects\consoleapplication1\consoleapplication1\source.cpp(8) : warning C4700: использована неинициализированная локальная переменная "a1"
    -------------------- Готово ---------------------

    Изменить и продолжить : warning : Невозможно применить изменение "main" до завершения текущего вызова. Исходный (устаревший) экземпляр "_main" продолжит выполняться до его завершения. В будущих вызовах будет использоваться новая реализация.
    Изменить и продолжить: изменения в коде успешно применены.
    Последний раз редактировалось Kakos_nonos; 25.09.2015 в 20:14.
    Ответить с цитированием  
     

  2. #2  
    Профи
    Регистрация
    09.11.2013
    Сообщений
    273
    Сказал(а) спасибо
    17
    Поблагодарили 80 раз(а) в 54 сообщениях
    Цитата Сообщение от ScorheD Посмотреть сообщение
    О боги,помогите днищекодеру с си прогой
    си или си++?
    Ответить с цитированием  
     

  3. #3  
    Профи Аватар для rrrFer
    Регистрация
    01.08.2013
    Сообщений
    561
    Сказал(а) спасибо
    34
    Поблагодарили 249 раз(а) в 164 сообщениях
    Это не ошибки, а предупреждения, т.е. программа с ними должна запускаться.
    Но можешь исправить:
    source.cpp(10): warning C4244: =: преобразование "double" в "float", возможна потеря данных
    предупреждение в 10 строке. Дело в том, что функция sqrt возвращает тип double, но ты преобразуешь результат во float (потому что присваиваешь его переменной типа float), при этом происходит округление.
    source.cpp(12): warning C4244: =: преобразование "double" в "float", возможна потеря данных
    предупреждение в 12 строке. В правой части выражения ты делишь на 3.14, но это число типа double, а значит и результат вычисления правой части будет тоже типа double.

    Второе предупреждение ты можешь пофиксить написав 3.14f вместо 3.14, при этом ты явно задашь тип числа.
    Чтобы исправить первое тебе надо изменить тип переменных h, k, z заменить на double.


    Цитата Сообщение от ScorheD Посмотреть сообщение
    ments\visual studio 2015\projects\consoleapplication1\consoleapplication1\source.cpp(8): warning C4477: 'scanf' : format string '%f' requires an argument of type 'float *', but variadic argument 1 has type 'double'
    c:\users\w\documents\visual studio 2015\projects\consoleapplication1\consoleapplication1\source.cpp(8): warning C4477: 'scanf' : format string '%f' requires an argument of type 'float *', but variadic argument 2 has type 'double'
    c:\users\w\documents\visual studio 2015\projects\consoleapplication1\consoleapplication1\source.cpp(8): warning C4477: 'scanf' : format string '%f' requires an argument of type 'float *', but variadic argument 3 has type 'double'
    c:\users\w\documents\visual studio 2015\projects\consoleapplication1\consoleapplication1\source.cpp(8): warning C4477: 'scanf' : format string '%f' requires an argument of type 'float *', but variadic argument 4 has type 'double'
    Предупреждение в 8 строке, которое реально выливается в ошибку.
    Цитата Сообщение от ScorheD Посмотреть сообщение
    scanf("%f%f%f%f", a1, a2, b1, b2);
    Тут несоответствие типов аргументов, функция scanf с параметром %f ожидает получить на вход тип float*, но ты передаешь просто float (не знаю почему твой компилятор пишет double - наверное потому что это проделка microsoft-a).
    Реально тебе надо передавать адрес переменной, вот так:
    C Code:
    1. [Ссылки могут видеть только зарегистрированные пользователи. ]("%f%f%f%f", &a1, &a2, &b1, &b2);


    Далее тебе пишут, что использование функции scanf может быть опасным, надо использовать безопасную версию - scanf_s. Реально это еще один загон микрософта, т.к. их функция ничем не безопаснее, но зато она не работает ни в одном компиляторе кроме вижуал студии (такой код не запустится под linux/android/ios/...):
    c:\users\w\documents\visual studio 2015\projects\consoleapplication1\consoleapplication1\source.cpp(8): warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    c:\program files\windows kits\10\include\10.0.10150.0\ucrt\stdio.h(1270): note: см. объявление "scanf"
    Попробуй добавить первой строкой программы это:
    C Code:
    1. #define _CRT_SECURE_NO_WARNINGS

    Это отменит такие предупреждения.

    Ну и если ты сделаешь все так, как я описал выше, то остальные ошибки исправятся сами:
    source.cpp(8) : warning C4700: использована неинициализированная локальная переменная "b2"
    c\source.cpp(8) : warning C4700: использована неинициализированная локальная переменная "b1"
    source.cpp(8) : warning C4700: использована неинициализированная локальная переменная "a2"
    source.cpp(8) : warning C4700: использована неинициализированная локальная переменная "a1"
    Тут дело в том, что ты использовал значения переменных, а не их адрес, однако значения у них небыло (они не инициалилизрованные) и это потенциально опасно. Проблема решилась когда вместо передачи значений мы начали передавать адрес переменных.
    [Ссылки могут видеть только зарегистрированные пользователи. ] // программирование на Prolog, Erlang, C++
    Ответить с цитированием  
     

  4. 2 пользователя(ей) сказали cпасибо:

    >Quiet Snow< (26.09.2015), stabud (26.09.2015)

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •