#c
#c
Вопрос:
Я пытаюсь использовать указатель в этом коде. но это не работает, это должно быть
#include <stdio.h>
#include<stdlib.h>
#include <math.h>
void scan_data(char sign, float num);
float do_next_op( float num, float* sum);
int main()
{
printf("Press enter");
scan_data('x',1);
return 0;
}
void scan_data(char sign, float num)
{
char op, symbol;
float sum;
sum = 0;
while (op!='q'||op!='Q') {
scanf("%c", amp;symbol);
printf("Enter an operator [^,*,/, ,-, q(quit)n");
scanf("%c", amp;op);
if(op=='q'||op=='Q')
{
printf("The final result is %1.2fn", sum);
exit(0);
}
else
{
printf("Enter a number to calculate for: ");
scanf("%f", amp;num);
printf("%c%1.2fn",op, num);
sum =do_next_op(num, amp;sum);
}
}
}
float do_next_op(float num, float* sum)
{
switch('x')
{
case(' '):
*sum= *sum num;
printf("The result so far is %1.2fn", sum);
return *sum;
}
}
Мое упражнение состоит в том, чтобы создать простой калькулятор, который может вычислять эти операторы — * / и ^ . Каждый раз, когда я даю программе число и оператор, она выдает мне результат, затем сохраняет предыдущий результат и продолжает вычислять число и оператор, пока я не нажму q.
Вот как это будет выглядеть.
Enter operator, and an optional operand: 5.000000
Result so far is 5.000000.
Enter operator, and an optional operand: - 6.000000
Result so far is -1.000000.
Enter operator and an optional operand: * 3.000000
Result so far is -3.000000.
Enter operator, and an optional operand: q
Final result is: 0.083333
and here is my code which doesn't work
этот код может выполняться, но он не сохраняет значение операнда.
вот диалог между мной и программой
Press enter
Enter an operator [^,*,/, ,-, q(quit)
Enter a number to calculate for: 5
5.00
Enter an operator [^,*,/, ,-, q(quit)
Enter a number to calculate for: 5
5.00
Enter an operator [^,*,/, ,-, q(quit)
Он не печатает этот код "printf("The result so far is %1.2fn", sum);"
почему?
Комментарии:
1. 1) Код, который вы опубликовали, не кажется полным. Пожалуйста, не забудьте опубликовать код, который можно успешно скомпилировать и запустить. 2)
switch('x')
не кажется правильным 3)sum= amp;sum num;
тоже не кажется правильным. 4) Вопрос: вы получаете ошибку компиляции или ошибку времени выполнения ??? 5) Пожалуйста, обновите свой пост и скопируйте / вставьте ТОЧНОЕ СООБЩЕНИЕ ОБ ОШИБКЕ .2. измените [ sum= amp;sum num; ] на [ *sum = *sum num; ], чтобы исправить эту ошибку
3. В функции
do_next_op()
параметромsum
является afloat *
. Чтобы получить доступ к значению, на котороеsum
указывает, вы должны использовать унарный*
оператор:*sum = *sum num
, например.4. @FoggyDay что я должен изменить при переключении (‘x’)?. моя ошибка — это просто недопустимые операнды для binary (имеют ‘float *’ и ‘float’) c
5. Научитесь использовать отладчик, такой как GDB
Ответ №1:
Похоже, в вашем коде есть несколько проблем
#include <stdio.h>
#include<stdlib.h>
/* you included a library header you dont use */
void scan_data(char sign, float num);
/* pass symbol char to do_next_op so you can test which symbol was
entered and test against in the function */
float do_next_op( float num, float* sum, char symbol);
int main()
{
printf("Press enter");
scan_data('x',1);
return 0;
}
void scan_data(char sign, float num)
{
char op, symbol;
float sum;
sum = 0;
while (op!='q'||op!='Q') {
scanf("%c", amp;symbol);
printf("Enter an operator [^,*,/, ,-, q(quit)] ");
scanf("%c", amp;op);
if(op=='q'||op=='Q')
{
printf("The final result is %1.2fn", sum);
exit(0);
}
else
{
printf("Enter a number to calculate for: ");
scanf("%f", amp;num);
printf("you eneterd symbol: %c and number is:%1.2fn",op, num);
sum = do_next_op(num, amp;sum, symbol);
/* sum is a cumlative operation use = not = */
}
}
}
float do_next_op(float num, float* sum, char symbol) {
/* you use switch statment with a char which i dont know why or how it can be used use if statements instead to see which symbol entered
as a result pass symbol to do_next_op function */
if (symbol == ' ') {
/* also use = instead of = as sum is cumaltive process you don't want to overwrite previous result */
/* also dereference pointer first as function is accepting pointers to floats not floats itself
dereference is done by * not amp;(this give address not value pointed by address)*/
*sum = (*sum num);
printf("The result so far is %1.2fn", sum);
return *sum;
}
}
Я попытался отметить некоторые ошибки в коде, чтобы вы могли знать его место. небольшое примечание, что вывод (сумма) отображается при выходе только в виде опубликованного вами кода, а код имеет дело только с
операциями
Комментарии:
1. Спасибо за помощь, но когда я запускаю этот код, он не вычисляет предыдущий результат, если я не нажму q, чтобы завершить цикл следующим образом Нажмите enter Введите оператор [^, ,/, ,-, q (выйти)] Введите число для вычисления: 5 вы вводите символ: и число:5.00 Введите оператор [^, ,/, ,-, q (выйти)] Введите число для вычисления: 5 вы вводите символ: и число:5.00 Введите оператор [^,*,/, ,-, q (выйти)] q Конечный результат равен 10.00
2. @BonPrasertsuwan это может быть добавлено простым
printf
после вашего вызоваdo_next_op
,main
я не хотел добавлять, так как я пытался сосредоточиться на ошибках, а не на улучшениях, но в любом случае это простое решение.используйтеprintf("sum now is: %fn", sum);
место послеsum = do_next_op(num, amp;sum, symbol);