Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2009, 16:47   #1
mambr
Пользователь
 
Регистрация: 23.05.2009
Сообщений: 21
Восклицание Выражение в С++

Мне нужно вычислить выражение в С++ 3.1

r=ch*3+(i+0.3)+(f+d)-12 где
ch-char, i-int, f,d,r-float

PHP код:
#include <stdio.h>
main()
{
char ch ;
int i ;
float f,d,;
printf ("Введите значение ch: \n") ;
scanf ("%c",ch) ;
printf ("Введите значение i: \n") ;
scanf ("%d",i) ;
printf ("Введите значение f: \n") ;
scanf ("%d",f) ;
printf ("Введите значение d: \n") ;
scanf ("%d",d) ;
r=ch*3+(i+0.3)+(f+d)-12 ;
printf ("r = %f\n",r) ;

Для проверки ввожу числа: ch-5, i-6, f-7, d-8. Что при конечном итоге получится 24,3.

Но программа выдает:
r = 615.299988
Null pointer assignment

PS Я вот сомневаюсь что для f и d нужно было применять %d, но что если не оно %f ? Или где может быть ошибка.
mambr вне форума Ответить с цитированием
Старый 19.09.2009, 17:02   #2
mMAg
Форумчанин
 
Аватар для mMAg
 
Регистрация: 11.08.2009
Сообщений: 433
По умолчанию

Код:
   int   i, result;
   float fp;
   char  c, s[81];
   wchar_t wc, ws[81];
   result = scanf( "%d %f %c %C %80s %80S", &i, &fp, &c, &wc, s, ws );
Вот пример из MSDN. Я надеюсь, разберетесь.

Цитата:
Для проверки ввожу числа: ch-5, i-6, f-7, d-8. Что при конечном итоге получится 24,3.
А вот на счет этого вы точно не правы. ch имеет тип char. Это не числовой тип. 5 - не есть пять как число, а есть символ.
mMAg вне форума Ответить с цитированием
Старый 19.09.2009, 17:15   #3
mambr
Пользователь
 
Регистрация: 23.05.2009
Сообщений: 21
По умолчанию

Поменял код формата на %f.
Код:
printf ("Введите значение f: \n") ; 
scanf ("%f",f) ; 
printf ("Введите значение d: \n") ; 
scanf ("%f",d) ;
В итоге когда доходит до ввода f: пишет на экране:

scanf : floating point formats not linked
Abnormal program termination

______________________________

И не пойму зачем тогда вводить символьное значение в выражение.
mambr вне форума Ответить с цитированием
Старый 19.09.2009, 17:35   #4
mMAg
Форумчанин
 
Аватар для mMAg
 
Регистрация: 11.08.2009
Сообщений: 433
По умолчанию

Я, вообще-то, хотел обратить ваше внимание не столько на то, что в качестве параметра можно передавать "%f", сколько на то, что неплохо бы в качестве второго параметра этой функции передавать адрес вашей переменной, а не саму переменную. Переменную типа int функция еще стерпела, но вот переменную типа float не смогла проглатить. В любом случае, если передавать не адрес, то последствия работы программы будут непредсказуемыми.
mMAg вне форума Ответить с цитированием
Старый 19.09.2009, 17:46   #5
mambr
Пользователь
 
Регистрация: 23.05.2009
Сообщений: 21
По умолчанию

Я не так давно начал изучать С++ и очень мало понял из того что вы написали, не могли бы вы указать где у меня ошибка и что нужно сделать.
mambr вне форума Ответить с цитированием
Старый 19.09.2009, 17:53   #6
mambr
Пользователь
 
Регистрация: 23.05.2009
Сообщений: 21
По умолчанию

Сейчас заметил в своих лекциях что, в одном из примеров стояло ("%c",&ch)

Попробовал поставил везде & и вот что получил при вводе этих символов и цифр: t 6 7 8.
r=357.299988

Только из за того что я ввожу первым символ, я не могу понять как программа высчитывает эту сумму.
mambr вне форума Ответить с цитированием
Старый 19.09.2009, 18:10   #7
mMAg
Форумчанин
 
Аватар для mMAg
 
Регистрация: 11.08.2009
Сообщений: 433
По умолчанию

Цитата:
Сообщение от mambr Посмотреть сообщение
Сейчас заметил в своих лекциях что, в одном из примеров стояло ("%c",&ch)

Попробовал поставил везде & и вот что получил при вводе этих символов и цифр: t 6 7 8.
r=357.299988

Только из за того что я ввожу первым символ, я не могу понять как программа высчитывает эту сумму.
ch - это переменная. &ch - адрес переменной. Так что вы правильно разобрались. Видите, можно и самому прийти к правильному результату, даже если вы чего-то недопоняли .

Дело в том, что t - переменная типа char. Есть подозрения, что в арифметическом выражении участвует ее код.
Программа работает правильно, я думаю. Cкорее всего код символа t есть 116. А вы уж сами посчитайте, правильно ли работает ваша программа.
mMAg вне форума Ответить с цитированием
Старый 19.09.2009, 18:23   #8
mambr
Пользователь
 
Регистрация: 23.05.2009
Сообщений: 21
По умолчанию

Как я понял если вводить a - английскую (97) но почему именно 97 ? И при изменении из a в b например, в ответе всегда меняется значение на 3.

Ну да ладно, это не столь важно, главное что вы помогли и на толкнули меня на ошибку, я уже аж сдался, но в ожидании ответа полистал конспект и на толкнулся. Спасибо, если тут как то можно поднять репутацию, то скажите как.
mambr вне форума Ответить с цитированием
Старый 19.09.2009, 19:02   #9
mMAg
Форумчанин
 
Аватар для mMAg
 
Регистрация: 11.08.2009
Сообщений: 433
По умолчанию

Цитата:
Как я понял если вводить a - английскую (97) но почему именно 97 ? И при изменении из a в b например, в ответе всегда меняется значение на 3.
На формулу взгляните. Там же код символа умножается на 3.

Цитата:
Как я понял если вводить a - английскую (97) но почему именно 97 ? И при изменении из a в b например, в ответе всегда меняется значение на 3.
На весы под профилем пользователя-цели нажимаете и далее, вроде, все понятно.
mMAg вне форума Ответить с цитированием
Старый 19.09.2009, 20:02   #10
mambr
Пользователь
 
Регистрация: 23.05.2009
Сообщений: 21
По умолчанию

И немного не по теме но все же, каким редактором можно открыть исходный код, чтобы видны были русские символы и можно было перенести в Майкрасофт ворд для распечатки.
mambr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
моульное выражение )Игнат( Общие вопросы Delphi 1 25.08.2009 21:48
Логическое выражение DaniyMilner Общие вопросы C/C++ 6 22.02.2009 19:14
регулярное выражение XeN0N Помощь студентам 1 27.01.2009 15:14
Проверьте выражение fosto Помощь студентам 2 15.12.2008 22:58
Строковое выражение SeregaIRK Общие вопросы C/C++ 1 07.10.2008 19:20